【问题标题】:How to construct JSON array with Parson?如何用 Parson 构造 JSON 数组?
【发布时间】:2018-10-02 02:46:53
【问题描述】:

我正在使用Parson 库将传感器数据从 MCU 发送到服务器。我想生成以下 JSON,但 我不知道如何生成数组(“传感器”和“测量”)。

{
  "systemInfo:": {
  "hubId": "1234",
  "battery:": {
      "value": 3.3,
      "unit": "V"
   }
 },
 "sensors": [
 {
   "name": "S1",
   "measurements:": [
    {
      "measuredValue": "val",
      "value": 123,
      "unit": "unit"
    }
  ]
 },
 {
   "name": "S2",
   "measurements": [
    {
      "measuredValue": "val1",
      "value": 123,
      "unit": "unit1"
    },
    {
      "measuredValue": "val2",
      "value": 123,
      "unit": "unit2"
    }
  ]
 },
 {
   "name": "s3",
   "measurements": [
    {
      "measuredValue": "val",
      "value": 120,
      "unit": "unit"
    }
   ]
  }
 ]
}

GitHub页面上有一个例子(serialization_example),通过解析字符串生成数组:

json_object_dotset_value(root_object, "contact.emails",
                         json_parse_string("[\"email@example.com\", \"email2@example.com\"]"));

但我想使用 API 函数生成它,而不是像上面示例中那样手动构造字符串。例如,通过使用

json_object_set_string()
json_object_dotset_string()
json_object_dotset_number() etc.

有可能吗?还是 API 不提供此功能?

【问题讨论】:

    标签: c json parsing serialization microcontroller


    【解决方案1】:

    我没有找到解决问题的方法,而是找到了另一个库 cJSON,它可以满足我的需求。

    【讨论】:

      【解决方案2】:

      我被困在同一点上,但是当我查看 parson.h 和 parson.c 时,我发现了对 Json_Array 的支持。这里只是提供帮助的示例代码。

          //creating a Json_Array
          JSON_Value *branch = json_value_init_array();
          JSON_Array *leaves = json_value_get_array(branch);
          
          //creating measurement Json
      
          JSON_Value *leaf_value = json_value_init_object();
          JSON_Object *leaf_object = json_value_get_object(leaf_value);
          json_object_set_number(leaf_object,"name1",123);
          json_object_set_number(leaf_object,"name2",456);
          json_object_set_number(leaf_object,"name3",789);
          json_array_append_value(leaves,leaf_value);
      

      希望这会有所帮助。

      【讨论】:

      • 你有一个错误,用JSON_Array *leaves = json_value_get_array(branch);修复第二行,谢谢
      • 太棒了!你救了我。如果您添加正在构建的 JSON 的字符串表示形式,将会更容易理解。但是感谢您的回复!
      猜你喜欢
      • 2018-12-03
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 2022-12-06
      • 2016-08-30
      相关资源
      最近更新 更多