使用noxDB,ParseString失败,但ParseFile使用相同的JSON成功

问题描述 投票:0回答:1

在 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;

谢谢您的帮助。

ibm-midrange rpgle
1个回答
0
投票

您不包含流文件,但我怀疑有些不同......

我没有使用过 noxDb,但我不希望 json_parseString() 的工作方式与 json_ParseFile() 有任何不同。不确定这里的任何人是否有使用 noxDb 的经验。您可以尝试中型 RPG 邮件列表noxDB github。实际上,查看 noxDb json_ParseFile 的源代码只是读取整个文件并将其传递给 json_ParseString()。所以是的..有些不同。

据我所知,位置 101 是第一个人的开口

{

我建议声明一个字符串变量并将其传递到 json_parseString() 而不是您现在拥有的常量值。这将允许通过调试或仅使用 DSPLY 检查该值。

© www.soinside.com 2019 - 2024. All rights reserved.