You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用parson库不借助点方法构造含多层子键的JSON结构

Parson 库非dot方式构造嵌套JSON实现方案

核心实现逻辑

完全不需要使用dot系列API,只需按照「从底层到上层逐层创建对象→填充键值→挂载到父对象对应键」的逻辑即可完成多层级关联,适配固定键名、动态键名的所有场景。

完整可运行示例代码

#include <stdio.h>
#include "parson.h"

int main() {
    // 1. 初始化根JSON对象
    JSON_Value *root_value = json_value_init_object();
    JSON_Object *root_object = json_value_get_object(root_value);

    // 2. 创建顶层键received_data对应的对象
    JSON_Value *received_data_val = json_value_init_object();
    JSON_Object *received_data_obj = json_value_get_object(received_data_val);

    // 3. 创建第一个子对象 X-YY,填充pm值
    JSON_Value *xyy_val = json_value_init_object();
    JSON_Object *xyy_obj = json_value_get_object(xyy_val);
    json_object_set_number(xyy_obj, "pm10", 1);
    json_object_set_number(xyy_obj, "pm25", 2);
    json_object_set_number(xyy_obj, "pm100", 3);
    // 将X-YY对象挂载到 received_data 对象下
    json_object_set_value(received_data_obj, "X-YY", xyy_val);

    // 4. 创建第二个子对象 X-ZZ,填充pm值
    JSON_Value *xzz_val = json_value_init_object();
    JSON_Object *xzz_obj = json_value_get_object(xzz_val);
    json_object_set_number(xzz_obj, "pm10", 1);
    // 按需填充其他字段...
    // 将X-ZZ对象挂载到 received_data 对象下
    json_object_set_value(received_data_obj, "X-ZZ", xzz_val);

    // 5. 将received_data对象挂载到根对象下
    json_object_set_value(root_object, "received_data", received_data_val);

    // 序列化输出验证结果
    char *serialized_json = json_serialize_to_string_pretty(root_value);
    puts(serialized_json);

    // 释放内存
    json_free_serialized_string(serialized_json);
    json_value_free(root_value);
    return 0;
}

关键说明

  • json_object_set_value(父对象, 键名, 子值指针) 是层级关联的核心API,负责将任意类型的子值(对象、数组、字符串、数值等)绑定到父对象的指定键名下
  • 你之前使用数组的写法不符合目标结构要求,目标结构里X-YY/X-ZZ都是对象的键,不是数组元素,直接创建对象挂载即可
  • 如果要设置数值类型不要用json_object_set_string,改用json_object_set_number即可匹配目标结构的数值类型
  • 如果X-YY/X-ZZ这类键名是动态生成的,直接把生成好的键名字符串传入json_object_set_value的第二个参数即可,不需要修改其他逻辑

内容的提问来源于stack exchange,提问作者MartinPolytech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 19:06:02