【发布时间】:2016-04-14 20:21:39
【问题描述】:
我编写了一些代码(休息服务器),为我生成 JSON 格式的数据。当我在 PHP 中使用它时,它工作正常,JSON 有效,一切正常。当我在 Delphi 中使用它时,没有任何效果。
当我搜索互联网时,我发现:
desearilizing JSON using SuperObject
但该方法为我返回空字符串。
我想将 JSON 元素用作数组(例如 JSONValue.items[i])。
我正在使用 Delphi XE7 System.JSON,不想使用超级对象或任何其他库。
如何作为数组使用?
我粘贴生成 JSON 的代码:
var
qry: TfdQuery;
FieldsObj: TJSONObject;
FieldNameArray: TJSONArray;
I: Integer;
DataObj: TJSONObject;
DataRows: TJSONArray;
RowFields: TJSONArray;
tablename:string;
begin
tablename:='produkt';
qry := TfdQuery.Create(Self);
qry.SQL.Text := 'select * from produkt where (id ='''+ProductID+''')';
qry.Connection := FDConnection1;
qry.Open;
FieldsObj := TJSONObject.Create;
FieldNameArray := TJSONArray.Create;
for I := 0 to qry.FieldCount - 1 do
FieldNameArray.Add(qry.Fields[I].FieldName);
FieldsObj.AddPair(TableName, FieldNameArray);
DataObj := TJSONObject.Create;
DataRows := TJSONArray.Create;
qry.First;
while not qry.Eof do
begin
RowFields := TJSONArray.Create;
for I := 0 to qry.FieldCount - 1 do
RowFields.Add(qry.Fields[I].AsString);
DataRows.Add(RowFields);
qry.Next;
end;
DataObj.AddPair('data', DataRows);
Result := TJSONArray.Create(FieldsObj, DataObj);
qry.Free;
结果如下:
{
"ProductID": "1",
"result": [{
"produkt": ["id", "parent_id", "full_name", "opcja_1", "opcja_2", "opcja_3", "opcja_4", "opcja_5", "opcja_6", "opcja_7", "opcja_8", "opcja_9", "opcja_10", "opcja_11", "opcja_12", "field_address1", "field_address2", "quantity", "opis", "zdjecie1", "zdjecie2", "zdjecie3", "samples", "link_stable0", "link_stable1", "link_stable2", "price1", "price2", "price3"]
}, {
"data": [
["1", "1", "name", "1", "1", "1", "1", "0", "0", "0", "0", "0", "0", "0", "12", "10", "20", "1,2", "description of product", "http://www.vphosted.com/e6=0", "photo link2", "photo link 3", "sample project file link", "link option", "10", "link", "10", "link", "10"]
]
}]
}
【问题讨论】:
-
不清楚你在这里问什么。您似乎在说您在使用此代码生成的 JSON 时遇到问题,并且它生成的 JSON 被 PHP 正确使用,这表明生产者代码本身没有任何问题。您确实需要发布您的 consumer 代码,并更清楚地解释它如何以及为什么不适合您。
-
json选择的结构很奇怪。
-
我同意 Rufo 爵士的观点 - 选择的结构非常奇怪,并且在最低级别缺少 JSON 对会导致问题。
-
您发布的 JSON 被 SuperObject 解析,就像一个魅力。请参阅rghost.ru/7vCtds8jY.view 所以 Deltics 是绝对正确的 - 您的 Delphi 消费者代码有问题,如果您希望我们能够找到其中的错误,您必须发布消费者代码
标签: json delphi delphi-xe7