New to the forums, sorry if my posts are not formatted or follow recommendations. I'll get it quickly. So here is my problem. Take a look at the code below. I removed almost all the extrant bits to focus on one key line -
LParts:=LJsonObj.Get('parts').JsonValue;
I have some formatted JSON data on top (Const) that has been validated as valid. When I try to parse it, it doesn't work at runtime (compilation time is great). I reduced it all to something smaller and more manageable for a solution.
When I run this in the debugger, all this seems correct, but even adding tests for Nil values, I have little understanding of understanding the problem.
I hope someone knows what the problem is. Here's the code snippet:
program ReadJSONConsoleApp;
{$APPTYPE CONSOLE}
{$R *.res}
uses
DBXJSON,
System.SysUtils;
Const
StrJson=
'{' +
' "response": {' +
' "distributor": {' +
' "id": 1538,' +
' "name": "Arrow Electronics",' +
' "authorized": true,' +
' "logoUrl": "this is normally a URL but I cut it out"' +
' },' +
' "parts": [' +
' {' +
' "manufacturer": "National Semiconductor",' +
' "part": "LM741WG/883",' +
' "description": "OP Amp Single GP ±22V 10-Pin CFPAK Tray",' +
' "price": [' +
' {' +
' "quantity": 0,' +
' "price": 65,' +
' "currency": "USD"' +
' }' +
' ],' +
' "stock": 88,' +
' "lastUpdated": "2013-11-04 18:27:16 UTC"' +
' },' +
' {' +
' "manufacturer": "National Semiconductor",' +
' "part": "LM741W/883",' +
' "description": "OP Amp Single GP ±22V 10-Pin CPAK Rail",' +
' "price": [' +
' {' +
' "quantity": 0,' +
' "price": 40.5,' +
' "currency": "USD"' +
' }' +
' ],' +
' "stock": 1464,' +
' "lastUpdated": "2013-11-04 18:27:16 UTC"' +
' },' +
' {' +
' "manufacturer": "Texas Instruments",' +
' "part": "LM741CH",' +
' "description": "OP Amp Single GP ±18V 8-Pin TO-99 Box",' +
' "price": [' +
' {' +
' "quantity": 0,' +
' "price": 5.22,' +
' "currency": "USD"' +
' }' +
' ],' +
' "stock": 95,' +
' "lastUpdated": "2013-11-04 18:27:16 UTC"' +
' }' +
' ]' +
' }' +
'}';
procedure ParseJson;
var
LJsonObj : TJSONObject;
LJPair : TJSONPair;
LParts : TJSONValue;
LPart : TJSONValue;
LItem : TJSONValue;
LIndex : Integer;
LSize : Integer;
begin
LJsonObj := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(StrJson),0) as TJSONObject;
try
LParts:=LJsonObj.Get('parts').JsonValue;
{LSize:=TJSONArray(LParts).Size;
for LIndex:=0 to LSize-1 do
begin
LPart := TJSONArray(LParts).Get(LIndex);
LJPair := TJSONPair(LPart);
Writeln(Format('Part Name %s',[LJPair.JsonString.Value]));
for LItem in TJSONArray(LJPair.JsonValue) do
begin
if TJSONPair(LItem).JsonValue is TJSONFalse then
Writeln(Format(' %s : %s',[TJSONPair(LItem).JsonString.Value, 'false']))
else
if TJSONPair(LItem).JsonValue is TJSONTrue then
Writeln(Format(' %s : %s',[TJSONPair(LItem).JsonString.Value, 'true']))
else
Writeln(Format(' %s : %s',[TJSONPair(LItem).JsonString.Value, TJSONPair(LItem).JsonValue.Value]));
end;
end; }
finally
LJsonObj.Free;
end;
end;
begin
try
ParseJson;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.
, .
,
EEJoe