|

将需要解析的JSON文件命名为data.json放在程序目录下,文件编码建议使用UTF-8
|
协议字段 | | |
Type | 文本型 | | | path | 文本型 | | | tag | 整数型 | | | value | 文本型 | | | note | 文本型 | | | 子成员 | 协议字段 | | 0 |
变量名 | 类 型 | 静态 | 数组 | 备 注 | json数据 | 文本型 | | | 解析结果 | 协议字段 | | 0 |
json数据 = 读入文本文件 ("data.json" ) 如果 (解析JSON数据 (json数据, 解析结果 )) 格式化输出 (解析结果 ) 写到文件 (取运行目录 () + "\解析结果.txt", 到字节集 (编辑框1.内容 )) 信息框 ("解析完成,结果已保存", 0, "完成", ) 信息框 ("JSON解析失败", 0, "错误", ) |
解析JSON数据 | 逻辑型 | | |
json文本 | 文本型 | | | | 解析结果 | 协议字段 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | json | 类_json | | | i | 整数型 | | | 清除数组 (解析结果 ) json文本 = 子文本替换 (json文本, 字符 (10 ), "", , , 真)json文本 = 子文本替换 (json文本, 字符 (13 ), "", , , 真) 如果真 (json. 解析 (json文本 ) = 假) 返回 (假) 计次循环首 (json. 取成员数 ("." ), i ) 重定义数组 (解析结果, 真, i ) 解析单个成员 (json. 取成员 (" [" + 到文本 (i - 1 ) + " ]" ), 解析结果 [i ]) 计次循环尾 ()返回 (真)|
解析单个成员 | | | |
成员json | 类_json | | | | 输出字段 | 协议字段 | | | |
输出字段.Type = 成员json. 取文本属性 ("Type" )输出字段.path = 成员json. 取文本属性 ("path", "" )输出字段.tag = 成员json. 取数值属性 ("tag", 0 ) 判断 (输出字段.Type = "Varint" ) 输出字段.value = 处理大整数 (成员json. 取文本属性 ("value" )) 判断 (输出字段.Type = "StringRaw" ) 输出字段.note = 成员json. 取文本属性 ("note", "" ) 输出字段.value = 处理StringRaw (输出字段.note ) 判断 (输出字段.Type = "Group" ) 解析Group成员 (成员json. 取成员 ("value" ), 输出字段.子成员 ) 输出字段.value = " [Group: " + 到文本 (取数组成员数 (输出字段.子成员 )) + " items ]"  |
解析Group成员 | | | |
groupJson | 类_json | | | | 输出数组 | 协议字段 | | | | 清除数组 (输出数组 ) 计次循环首 (groupJson. 取成员数 ("." ), j ) 重定义数组 (输出数组, 真, j ) 解析单个成员 (groupJson. 取成员 (" [" + 到文本 (j - 1 ) + " ]" ), 输出数组 [j ]) 计次循环尾 ()变量名 | 类 型 | 静态 | 数组 | 备 注 | 解码结果 | 文本型 | | | 字节数据 | 字节集 | | |
如果 (寻找文本 (raw数据, "H4sIAAAAAAAAA", , 假) > 0 ) 字节数据 = 编码_BASE64解码 (取文本右边 (raw数据, 取文本长度 (raw数据 ) - 寻找文本 (raw数据, "H4sIAAAAAAAAA" )) ) 解码结果 = 编码_Unicode到Ansi (字节数据 ) 解码结果 = raw数据 返回 (" [Binary:" + 取文本左边 (解码结果, 50 ) + "... ]" ) 如果 (取文本长度 (数值文本 ) > 15 ) 返回 (" [BigInt:" + 取文本左边 (数值文本, 5 ) + "..." + 取文本右边 (数值文本, 5 ) + " ]" ) 返回 (数值文本 ) 变量名 | 类 型 | 静态 | 数组 | 备 注 | i | 整数型 | | | 输出文本 | 文本型 | | |
输出文本 = "=== JSON解析结果 ===" + #换行符 + #换行符 计次循环首 (取数组成员数 (数据数组 ), i ) 输出文本 = 输出文本 + " [" + 到文本 (i ) + " ] " + 数据数组 [i ].Type + " (tag:" + 到文本 (数据数组 [i ].tag ) + " )" + #换行符   如果 (数据数组 [i ].path ≠ "" )  输出文本 = 输出文本 + " Path: " + 数据数组 [i ].path + #换行符   判断 (数据数组 [i ].Type = "Group" )  输出文本 = 输出文本 + " Value: " + 数据数组 [i ].value + #换行符   输出文本 = 输出文本 + 格式化子成员 (数据数组 [i ].子成员, " " ) 判断 (数据数组 [i ].note ≠ "" )  输出文本 = 输出文本 + " Note: " + 取文本左边 (数据数组 [i ].note, 50 ) + "..." + #换行符   输出文本 = 输出文本 + " Value: " + 数据数组 [i ].value + #换行符   输出文本 = 输出文本 + " Value: " + 数据数组 [i ].value + #换行符   输出文本 = 输出文本 + #换行符 计次循环尾 ()编辑框1.内容 = 输出文本 计次循环首 (取数组成员数 (子成员数组 ), i ) 结果 = 结果 + 缩进 + " [" + 到文本 (i ) + " ] " + 子成员数组 [i ].Type + " (tag:" + 到文本 (子成员数组 [i ].tag ) + " )" + #换行符   如果 (子成员数组 [i ].path ≠ "" )  结果 = 结果 + 缩进 + " Path: " + 子成员数组 [i ].path + #换行符   判断 (子成员数组 [i ].Type = "Group" )  结果 = 结果 + 缩进 + " Value: " + 子成员数组 [i ].value + #换行符   结果 = 结果 + 格式化子成员 (子成员数组 [i ].子成员, 缩进 + " " ) 判断 (子成员数组 [i ].note ≠ "" )  结果 = 结果 + 缩进 + " Note: " + 取文本左边 (子成员数组 [i ].note, 30 ) + "..." + #换行符   结果 = 结果 + 缩进 + " Value: " + 子成员数组 [i ].value + #换行符   结果 = 结果 + 缩进 + " Value: " + 子成员数组 [i ].value + #换行符   结果 = 结果 + #换行符 计次循环尾 ()返回 (结果 )
|
|