2012-05-11 9 views
7

डेल्फी में जेएसओएन को समझने की कोशिश कर रहा है। मॉड्यूल का प्रयोग "DBXJSON.pas"। कैसे इस तरह के एक सरणी बनाने के लिए इसका इस्तेमाल करने की:डेल्फी: जेएसओएन सरणी

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

डेल्फी के साथ जो कुछ भी भेजा जाता है, उसका उपयोग करने के लिए स्पष्ट फायदे हैं, लेकिन यदि आप बहुत सारे JSON सामान करने जा रहे हैं, तो आपको वास्तव में SuperObject पर एक नज़र डालना चाहिए। यह कई तरीकों से कमाल है। http://code.google.com/p/superobject/source/checkout –

+0

आप अपने ऑब्जेक्ट में '1_1' की मान चाहते हैं। यह वैध जावास्क्रिप्ट मान नहीं है। संख्यात्मक अक्षर को अंडरस्कोर रखने की अनुमति नहीं है। (उन्हें जावा और पर्ल में अनुमति है, लेकिन जावास्क्रिप्ट नहीं।) कृपया स्पष्ट करें कि आप वास्तव में क्या चाहते थे, क्योंकि आपका प्रश्न वर्तमान में दिखाई देता है, जो आप चाहते हैं वह वास्तव में JSON नहीं है, इसलिए आपको JSON लाइब्रेरी का उपयोग नहीं करना चाहिए। –

उत्तर

10

कोड, जिसे आपने ऊपर पोस्ट किया है, सही नहीं है। आपने JSON-Array बनाया है और उस सरणी में जोड़ी-तत्व जोड़ने की कोशिश कर रहा है। लेकिन, सरणी में जोड़े जोड़ने के बजाय आपको इस सरणी में 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"} 
    ] 
} 
0

@teran के रूप में एक ही जवाब:
यहाँ अपनी समस्या को हल करने के लिए एक नमूना कोड है

परिवर्तन:

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' का उप-वर्ग नहीं है, इसलिए आपका सुझाया गया कोड संकलित भी नहीं होगा। वांछित आउटपुट सरणी के लिए एक मान रखने के लिए है। आप जोड़ों को सीधे सरणी में जोड़ने की कोशिश कर रहे हैं, लेकिन जोड़े मूल्य नहीं हैं। तो, आपका जवाब टेरन के समान ही है? –

+0

@ रोब केनेडी ओके, एक त्रुटि मिली, विचार अतिरिक्त स्तर वस्तु को हटा दिया गया था – umlcat