我编写了一些代码(rest服务器),为我生成JSON格式的数据。当我在PHP中使用它时工作正常,JSON有效,一切正常。当我在Delphi中使用它时,没有任何作用。
当我搜索互联网时,我发现:
desearilizing JSON using SuperObject
但该方法为我返回空字符串。
我想将JSON元素用作数组(例如JSONValue.items [i])。
我正在使用Delphi XE7 System.JSON,并且不想使用superobject或任何其他库。
如何将其用作数组?
我粘贴生成JSON的代码:
{
"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"]
]
}]
}
这就是结果:
{{1}}
答案 0 :(得分:1)
这将以我期望的格式生成更多JSON:
var
qry: TfdQuery;
FieldsObj: TJSONObject;
//FieldNameArray: TJSONArray;
I: Integer;
DataObj: TJSONObject;
FieldObj: 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
begin
FieldObj := TJSONObject.Create;
FieldObject.AddPair(qry.Fields[I].FieldName, qry.Fields[I].AsString));
RowFields.Add( FieldObj );
end;
DataRows.Add(RowFields);
qry.Next;
end;
DataObj.AddPair('data', DataRows);
Result := TJSONArray.Create(FieldsObj, DataObj);
qry.Free;
但是,如果你知道记录结构,我宁愿使用REST.JSON,我很确定它随附XE7并且使用起来更简单。您只需创建对象结构,创建该结构的实例,使用您的字段值填充它并使用
TJSON.ObjectToJsonString( fObject )
创建字符串和
iObject := TJSON.JsonToObject<TMyObject>( pTransferString );
让你的物体回来。
如果您想要使用此方法的更完整的示例,请告诉我,我将发布。