我正在尝试解析从 REST Web 服务返回的一些 JSON。get() 调用的返回是一个 TStringStream。我正在使用 dbxjson 处理数据。为了让这里的演示更容易,我创建了一个测试项目,它可以在不调用 Web 服务的情况下重现错误(改用文本文件作为 Web 服务输出)。这是代码:
var SL : TStringStream;
LJsonObj : TJSONObject;
begin
SL := TStringStream.Create;
try
SL.LoadFromFile('output.txt');
LJsonObj := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(SL.DataString), 0) as TJSONObject;
finally
SL.Free;
end;
end;
有时这个 JSON 数据中的 phone_numbers 数组是空的。在来自 Web 服务调用的流对象中,它看起来像这样:
{
"Contact Information Service": {
"response": {
"phone_numbers": [
]
}
}
}
这会导致 ParseJSONValue 返回一个 nil 值。
但是,如果我在我的测试 txt 文件中将空的 phone_numbers 数组更改为此:
{
"Contact Information Service": {
"response": {
"phone_numbers": []
}
}
}
它工作正常(即返回一个 TJSONObject)。不同之处在于空数组中的空格。由于某种原因,空数组中带有空格的第一个 JSON 响应会导致 ParseJSONValue 返回 nil。它工作正常,方括号之间没有空格。
我的 JSON 解析做错了什么?在调用 ParseJSONValue 之前我需要做某种预解析吗?