【问题标题】:error converting string to JSON with RAD Studio使用 RAD Studio 将字符串转换为 JSON 时出错
【发布时间】:2014-06-05 15:40:01
【问题描述】:

我有这个问题:

我接收这种格式的字符串:

{
    {
        "name":"j1",
        "type":"12"
    },
    {
        "name":"j2",
        "type":"15"
    },
    .....
}

我想读取数据 像 get("name") 和 get(type) 读取所有数据值并显示类似

j1 12 j2 15 j3 23 等

我在移动设备上使用 RAD studio,firemonkey。

我编写了这段代码来将字符串解析为 JSON 并读取它。

jo: TJSONObject;
jp: TJSONPair;
va1:TJSONvalue;
va2:TJSONvalue;

jo:= TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(a),0) as TJSONObject;

jp := jo.Get(1);
for i := 0 to jo.Size - 1 do
begin
    jp := jo.Get(i);
    Memo1.Lines.Add('ToString: ' + jp.ToString);
    Memo1.Lines.Add('JsonString: ' + jp.JsonString.Value);
    if (jp.JSONValue is TJSONTrue) or
            (jp.JSONValue is TJSONFalse) or
            (jp.JSONValue is TJSONNull) then
        Memo1.Lines.Add('JsonValue: ' + jp.JsonValue.ToString)
    else
        Memo1.Lines.Add('JsonValue: ' + jp.JsonValue.Value)
end;

当程序执行jp := jo.Get(1);时出现这个错误“地址53605374访问地址0000013C的访问冲突”

我尝试了其他方法......但我无法解开谜团。

【问题讨论】:

  • 我认为这不是有效的 JSON,因此您可能必须自己解析它。或者至少在将其发送到 TJSONObject 之前先对其进行一些操作。
  • 想想jo.Size 小于 2 时会发生什么。jo.Get(1) 将无效。
  • 我对这些编码不太熟悉,但我认为 JSON 通常是 UTF-8,所以我不明白 TEncoding.ASCII.GetBytes(a),。但大卫A是对的。这不是有效的 JSON。你确定你抄对了吗?如果外部花括号是方括号,那将是有效的。在这种情况下,您将拥有一个包含两个对象的数组。

标签: json delphi delphi-xe


【解决方案1】:

根据json.org,这不是一个有效的 json。

一个有效的 json(已验证 online)将是:

[
  {
    "name":"j1",
    "type":"12"
  },
  {
    "name":"j2",
    "type":"15"
  },
  .....
]

或者

{
  data: [
    {
      "name":"j1",
      "type":"12"
    },
    {
      "name":"j2",
      "type":"15"
    },
    .....
    ]
}

【讨论】:

    猜你喜欢
    • 2012-07-29
    • 2021-03-19
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    相关资源
    最近更新 更多