Ich würde dir sehr superobject ans Herz legen:
github.com/hgourvest/superobject
Leider ist dein geposteter Text
kein valides JSON. Das liegt am String OK, dem die Anführungszeichen fehlen. (Bist du sicher, dass das genau so ankommt?)
SuperObject verarbeitet das allerdings, soweit ich mich entsinne, dennoch. Daher sollte das gehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| uses superobject;
var JsonValue: ISuperObject; ArrayValues: TSuperArray; begin JsonValue := SO('[2,0,{"Status":OK},{"Zeit":123.456}]'); ArrayValues := JsonValue.AsArray; ShowMessage(ArrayValues[0].AsString); ShowMessage(ArrayValues[1].AsString); ShowMessage(ArrayValues[2]['Status'].AsString); ShowMessage(ArrayValues[3]['Zeit'].AsDouble.ToString);
ShowMessage(ArrayValues.S[0]); ShowMessage(ArrayValues.S[1]); ShowMessage(ArrayValues[2].S['Status']); ShowMessage(ArrayValues[3].D['Zeit'].ToString); |
Mit den integrierten Möglichkeiten ginge es so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| uses System.JSON;
var JsonArray: TJSONArray; StatusObj, ZeitObj: TJSONObject; begin JsonArray := TJSONObject.ParseJSONValue('[2, 0, {"Status": OK}, {"Zeit": 123.456}]') as TJSONArray; try ShowMessage(JsonArray.Items[0].AsType<string>); ShowMessage(JsonArray.Items[1].AsType<string>); StatusObj := JsonArray.Items[2] as TJSONObject; ShowMessage(StatusObj.GetValue<string>('Status')); ZeitObj := JsonArray.Items[3] as TJSONObject; ShowMessage(ZeitObj.GetValue<Double>('Zeit').ToString); finally JsonArray.Free; end; |
Aber das dürfte nicht gehen, weil das JSON nicht valide ist.
Es gibt auch noch:
github.com/onryldz/x...ter/XSuperObject.pas