在 IBM i 上的 RPG 程序中使用 noxDB,ParseString 失败,但使用相同的 JSON 时 ParseFile 成功。
请参阅下面的示例。 ParseString 无法处理数组吗?如果是这样,有解决办法吗?
在示例 1 中,json_Error(pJson) 返回 true。 这是错误消息:
(1:101) 令牌编号处的令牌无效:5。需要一个“,” 但有一个{接近
在示例 2 中,json_Error(pJson) 返回 false。
// ------------------------------------------------------------------------------------
// example1
// ------------------------------------------------------------------------------------
Dcl-Proc example1;
Dcl-S pJson Pointer;
Dcl-S msg varchar(256);
pJson = json_parseString(' -
{ -
"people":[ -
{ -
"name":"John", -
"age":23, -
}, -
{ -
"name":"David", -
"age":25, -
} -
] -
} -
');
If json_Error(pJson) ;
msg = json_Message(pJson);
myTrace (msg :pJson);
json_delete(pJson);
Return;
EndIf;
myTrace ('After the parse: ':pJson);
json_delete (pJson);
End-Proc;
// ------------------------------------------------------------------------------------
// example2
// ------------------------------------------------------------------------------------
Dcl-Proc example2;
Dcl-S pJson Pointer;
Dcl-S msg varchar(256);
pJson = json_ParseFile ('./example2.json');
If json_Error(pJson) ;
msg = json_Message(pJson);
myTrace (msg :pJson);
json_delete(pJson);
Return;
EndIf;
myTrace ('After the parse: ':pJson);
json_delete (pJson);
End-Proc;
谢谢您的帮助。
您不包含流文件,但我怀疑有些不同......
我没有使用过 noxDb,但我不希望 json_parseString() 的工作方式与 json_ParseFile() 有任何不同。不确定这里的任何人是否有使用 noxDb 的经验。您可以尝试中型 RPG 邮件列表或noxDB github。实际上,查看 noxDb json_ParseFile 的源代码只是读取整个文件并将其传递给 json_ParseString()。所以是的..有些不同。
据我所知,位置 101 是第一个人的开口
{
。
我建议声明一个字符串变量并将其传递到 json_parseString() 而不是您现在拥有的常量值。这将允许通过调试或仅使用 DSPLY 检查该值。