2012-05-11 3 views
7

델파이에서 JSON을 이해하려고합니다. "DBXJSON.pas"모듈 사용. 이렇게델파이 : JSON 배열

Array:[ 
     {"1":1_1,"1_2_1":1_2_2}, 
     ..., 
    ] 

:

JSONObject:=TJSONObject.Create; 
JSONArray:=TJSONArray.Create(); 
... 
JSONArray.AddElement(TJSONObject.Create(TJSONPair.Create('1','1_1'))); 
JSONArray.AddElement(TJSONObject.Create(TJSONPair.Create('1_2_1','1_2_2'))); 
JSONObject.AddPair('Array',JSONArray); 

을하지만,이 얻을 : 어떻게이 같은 배열을 만들기 위해 그것을 사용하는

{ 
"Array":[ 
{"1":"1_1"},{"1_2_1":"1_2_2"} 
] 
} 

도와주세요! 감사합니다.

+1

Delphi에 포함 된 것을 사용하면 명백한 이점이 있지만, 많은 JSON 작업을 수행하려면 SuperObject를 살펴 봐야합니다. 여러모로 굉장합니다. http://code.google.com/p/superobject/source/checkout –

+0

개체에 '1_1' 값이 필요하다고 주장합니다. 유효한 Javascript 값이 아닙니다. 숫자 리터럴에는 밑줄이 포함될 수 없습니다. (Java와 Perl에서는 허용되지만 Javascript에서는 허용되지 않습니다.) 질문이 표시 될 때 원하는 내용이 JSON이 아니므로 JSON 라이브러리를 사용해서는 안됩니다. –

답변

10

위에 게시 한 코드가 올바르지 않습니다. JSON 배열을 만들고 그 배열에 쌍 요소를 추가하려고합니다. 그러나 배열에 쌍을 추가하는 대신 JSON Objects을이 배열에 추가해야하며 이러한 객체에는 쌍이 있어야합니다.

program Project3; 

{$APPTYPE CONSOLE} 

uses 
    SysUtils, dbxjson; 

var jsobj, jso : TJsonObject; 
    jsa : TJsonArray; 
    jsp : TJsonPair; 
begin 
    try 
    //create top-level object 
    jsObj := TJsonObject.Create(); 
    //create an json-array 
    jsa := TJsonArray.Create(); 
    //add array to object 
    jsp := TJSONPair.Create('Array', jsa); 
    jsObj.AddPair(jsp); 

    //add items to the _first_ elemet of array 
    jso := TJsonObject.Create(); 
    //add object pairs 
    jso.AddPair(TJsonPair.Create('1', '1_1')); 
    jso.AddPair(TJsonPair.Create('1_2_1', '1_2_2')); 
    //put it into array 
    jsa.AddElement(jso); 

    //second element 
    jso := TJsonObject.Create(); 
    //add object pairs 
    jso.AddPair(TJsonPair.Create('x', 'x_x')); 
    jso.AddPair(TJsonPair.Create('x_y_x', 'x_y_y')); 
    //put it into array 
    jsa.AddElement(jso); 

    writeln(jsObj.ToString); 
    readln; 

    except 
    on E: Exception do 
     Writeln(E.ClassName, ': ', E.Message); 
    end; 
end. 

출력됩니다

{"Array":[ 
    {"1":"1_1","1_2_1":"1_2_2"}, 
    {"x":"x_x","x_y_x":"x_y_y"} 
    ] 
} 
@teran로
0

같은 대답 :
여기 가 문제를 해결하기위한 샘플 코드입니다

변화 :

JSONArray.AddElement(TJSONObject.Create(TJSONPair.Create('1','1_1'))); 
JSONArray.AddElement(TJSONObject.Create(TJSONPair.Create('1_2_1','1_2_2'))); 

에 :

JSONArray.AddElement(TJSONPair.Create('1','1_1')); 
JSONArray.AddElement(TJSONPair.Create('1_2_1','1_2_2')); 

건배.

+0

'AddElement' 메쏘드는'TJSONValue'를 기대합니다. 그러나'TJSONPair'는'TJSONValue'의 서브 클래스가 아니므로 제안 된 코드는 컴파일되지 않습니다. 원하는 출력은 배열에 값을 포함합니다. 배열에 쌍을 직접 추가하려고하지만 쌍은 값이 아닙니다. 그래서, 당신의 대답은 Teran과 같은 대답입니까? –

+0

@ Rob Kennedy Ok, 오류가 발생했습니다. 추가 레벨 객체를 제거하는 것이 좋습니다. – umlcat