开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 676|回复: 14
收起左侧

[原创软件] Json解析工具X64

[复制链接]
结帖率:67% (8/12)
发表于 2025-3-22 07:06:56 | 显示全部楼层 |阅读模式   重庆市重庆市
软件展示
在线分析报告: https://sandbox.ti.qianxin.com/sandbox/page/detail?type=file&id=AZW664TQSZq0HOVfliXB
本帖最后由 夜莫离 于 2025-3-22 21:35 编辑

Json解析工具X64
WLEBKGAF89E2F.png
分享下自己使用的Json工具
之前那个工具莫名其妙被删除就使用C重新写了一个不能生成代码 只能分析json 自己复制路径 精易模块的json解析选择 EJSON 然后放入json解析就行了
点击PATH按钮可以复制路径

  
子程序名返回值类型公开备 注
解析JSON文本型 
参数名类 型参考可空数组备 注
json文本文本型
变量名类 型静态数组备 注
Json类_json 
str文本型 
Json.解析 (json文本)
str = Json.取通用属性 (“features[0]”,真)
调试输出 (“str”, str)
返回 (str)


i支持库列表   支持库注释   
spec特殊功能支持库


选择 YYJSON 解析json后选择树控件的叶子后点击 PATH按钮 复制路径
[C++] 纯文本查看 复制代码
// 通过 JSON Pointer 获取值
static std::string GetValueByPointer(const char* json, const char* pointer) {
        // 解析 JSON 文档
        yyjson_doc* doc = yyjson_read(json, strlen(json), 0);
        if (!doc) {
                std::cerr << "Failed to parse JSON.\n";
                return "";
        }

        // 使用 JSON Pointer 获取值
        yyjson_val* val = yyjson_doc_ptr_get(doc, pointer);
        if (!val) {
                std::cerr << "Path not found: " << pointer << "\n";
                yyjson_doc_free(doc);
                return "";
        }
        char buffer[32];
        memset(buffer, 0, sizeof(buffer));

        //snprintf(buffer, sizeof(buffer), "%f", yyjson_get_real(val));
        // 根据类型获取值的字符串
        switch (yyjson_get_type(val)) {
        case YYJSON_TYPE_NULL:
                // JSON null 值
                snprintf(buffer, sizeof(buffer), "%s", "null");
                break; // 默认跳出
        case YYJSON_TYPE_BOOL:
                // 布尔类型 true/false
                snprintf(buffer, sizeof(buffer), "%s", yyjson_get_bool(val) ? "true" : "false");
                break; // 默认跳出
        case YYJSON_TYPE_STR:
                // 字符串类型直接返回
                snprintf(buffer, sizeof(buffer), "%s", yyjson_get_str(val));
                break; // 默认跳出
        case YYJSON_TYPE_NUM: {
                yyjson_subtype subtype = yyjson_get_subtype(val);
                if (subtype == YYJSON_SUBTYPE_UINT) {
                        // 无符号整型
                        snprintf(buffer, sizeof(buffer), "%llu", yyjson_get_uint(val));
                        break; // 默认跳出
                }
                else if (subtype == YYJSON_SUBTYPE_SINT) {
                        // 有符号整型
                        snprintf(buffer, sizeof(buffer), "%lld", yyjson_get_sint(val));
                        break; // 默认跳出
                }
                else if (subtype == YYJSON_SUBTYPE_REAL) {
                        // 重新创建一个 JSON 文档以解析原始字符串
                        yyjson_mut_doc* new_doc = yyjson_mut_doc_new(nullptr); // 创建一个新的空 JSON 文档
                        if (!new_doc) break; // 创建失败直接返回空字符串
                        // 创建一个可变值并拷贝原始的 val
                        yyjson_mut_val* new_val = yyjson_val_mut_copy(new_doc, val);
                        if (!new_val) {
                                yyjson_mut_doc_free(new_doc); // 清理资源
                                break;
                        }
                        // 将新值包装到一个最小的 JSON 文档中
                        yyjson_mut_doc* wrapped_doc = yyjson_mut_doc_new(nullptr);
                        if (!wrapped_doc) {
                                yyjson_mut_doc_free(new_doc);
                                return "";
                        }
                        yyjson_mut_doc_set_root(wrapped_doc, new_val); // 设置根节点为新值
                        // 将可变 JSON 转换为原始 JSON 字符串
                        const char* raw_json = yyjson_mut_write_opts(wrapped_doc, YYJSON_WRITE_ALLOW_INF_AND_NAN, NULL, NULL, 0);
                        // 有符号整型
                        snprintf(buffer, sizeof(buffer), "%s", raw_json);
                        // 清理资源
                        yyjson_mut_doc_free(new_doc);
                        yyjson_mut_doc_free(wrapped_doc);
                        break;
                }
                break;
        }
        default:
                break;
        }

        // 处理获取的值
        std::string result(buffer, sizeof(buffer));

        // 清理资源
        yyjson_doc_free(doc);
        return result;
}

static int GetValueByPointer_main() {
        const char* json = R"({
        "level_1": {
            "name": "Level1Object",
            "is_active": true,
            "count": 10,
            "level_2": {
                "description": "NestedtoLevel2",
                "features": ["Fast", "Scalable", "Secure"],
                "level_3": {
                    "meta": {
                        "created_at": "2025-03-19T12:00:00Z",
                        "updated_at": "2025-03-20T15:30:00Z",
                        "revision": 1
                    },
                    "values": [123, -456, 3.14159, 2.71828, 9223372036854775807, -9223372036854775808, true, false, "EndOfArray"],
                    "level_4": [
                        {
                            "type": "Object",
                            "structure": "ArrayofObjects",
                            "data": {
                                "a": 1,
                                "b": 2.5,
                                "c": "Hello"
                            }
                        },
                        ["NestedPrimitiveArray", 1, 1.1, null, true],
                        {
                            "deep_nested_object": {
                                "key": "Value",
                                "sub_level": {
                                    "int": 100,
                                    "float": 10.99,
                                    "bool": false,
                                    "deeper_array": ["DeepString", 1.23456789012345, 2147483647]
                                }
                            }
                        }
                    ],
                    "string_in_level_3": "Hello,Level3",
                    "flag": false
                },
                "is_running": false
            },
            "additional_floats": [1.23, 2.34, 3.456789, 4.5e-10, -0.00005]
        },
        "level_1_array": [
            {"item": 1},
            {
                "level_2_array_object": {
                    "nested": [
                        {
                            "deep_nested": [
                                {
                                    "even_deeper": {
                                        "key": "ValueatLevel5",
                                        "numbers": [1, 2, 3, 4.5],
                                        "statuses": [true, false]
                                    }
                                }
                            ]
                        }
                    ]
                }
            }
        ]
    })";

        const char* path = "/level_1/level_2/level_3/level_4/2/deep_nested_object/sub_level/deeper_array/2";
        std::string value = GetValueByPointer(json, path);
        std::cout << "Value at path " << path << ": " << value << '\n';

        return 0;
}


已修复编辑框长度限制问题

解压密码回复可见 CJsonParser2.zip (2.01 MB, 下载次数: 8, 售价: 3 枚 精币)

--------------------------优秀帖点我申请--------------------------
违规软件信息请点击帖子右下角举报按钮。

签到天数: 9 天

发表于 11 小时前 | 显示全部楼层   海南省海口市
已修复编辑框长度限制问题
回复 支持 反对

使用道具 举报

结帖率:71% (10/14)

签到天数: 4 天

发表于 昨天 10:44 | 显示全部楼层   重庆市重庆市
感谢分享
回复 支持 反对

使用道具 举报

签到天数: 4 天

发表于 5 天前 | 显示全部楼层   四川省内江市
我看看,支持原创
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 7 天前 高大上手机用户 | 显示全部楼层   河南省郑州市
6666666666666
回复 支持 反对

使用道具 举报

结帖率:67% (8/12)

签到天数: 2 天

 楼主| 发表于 2025-3-22 21:35:48 | 显示全部楼层   重庆市重庆市
starfee 发表于 2025-3-22 17:39
文本长度有限制,长一点儿的文本就无法装填。

已修复编辑框长度限制问题
回复 支持 反对

使用道具 举报

结帖率:57% (13/23)

签到天数: 14 天

发表于 2025-3-22 17:39:36 | 显示全部楼层   江西省景德镇市
文本长度有限制,长一点儿的文本就无法装填。
回复 支持 反对

使用道具 举报

签到天数: 25 天

发表于 2025-3-22 15:06:27 | 显示全部楼层   重庆市重庆市
感谢分享了收藏
回复 支持 反对

使用道具 举报

签到天数: 26 天

发表于 2025-3-22 14:57:05 | 显示全部楼层   江苏省南京市
谢谢分享了
回复 支持 反对

使用道具 举报

签到天数: 31 天

发表于 2025-3-22 12:47:22 | 显示全部楼层   湖北省荆州市
谢谢分享了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表