【发布时间】: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。你确定你抄对了吗?如果外部花括号是方括号,那将是有效的。在这种情况下,您将拥有一个包含两个对象的数组。