2011-08-13 15 views
22

से प्रतिक्रिया में उसी क्रम में नहीं हैं, मेरे पास JSON स्ट्रिंग के सर्वर से बहुत बड़ी प्रतिक्रिया है। मैंने इसे JSON ऑब्जेक्ट में परिवर्तित कर दिया और फिर चाबियां प्राप्त की और इसे फिर से चालू कर दिया।जब JsonObject की चाबियाँ पुनरावृत्त होती हैं तो वे सर्वर

समस्या यह है कि जब मैं पुनरावृत्ति करता हूं तो यह सर्वर से प्रतिक्रिया के समान क्रम में नहीं है।

इसके बाद मैं List<String> में सभी चाबियाँ जोड़कर एक और विधि लागू करता हूं और इसे क्रमबद्ध करता हूं और उसके बाद इसे फिर से प्राप्त करता हूं लेकिन फिर भी यह आवश्यक नहीं है (प्रतिक्रिया में)।

कोड उदाहरण यहाँ है:

JSONObject jsonObject = new JSONObject(responseString); 
    Iterator<String> myIter = jsonObject.keys(); 


    List<String> sortKey = new ArrayList<String>(); 

    while(myIter.hasNext()){ 
     sortKey.add(myIter.next()); 
    } 
    Collections.sort(sortKey); 

उत्तर

18

एक JSON ऑब्जेक्ट की चाबियों का सार्थक होना चाहिए नहीं है। यदि आप एक विशिष्ट आदेश चाहते हैं, तो आपको एक ऑब्जेक्ट का उपयोग करना चाहिए, न कि ऑब्जेक्ट।

आपका जावा कोड वर्णमाला के अनुसार कुंजी टाइप करता है। वस्तु में चाबियों के प्रारंभिक क्रम प्राप्त करने का कोई तरीका नहीं है।

Reference 1:

चाबियों का आदेश अपरिभाषित है

Reference 2:

एक वस्तु नाम/मान युग्म के एक अव्यवस्थित सेट है

+0

धन्यवाद आदमी लेकिन कृपया अगले प्रश्न को अभी देखें। http://stackoverflow.com/questions/7053915/how-to-parse-a-jsonobject-using-jsonarray-that-have- गतिशील-ids-in-start-as-inte – mastermind

+3

ईमानदार होने के लिए मुझे नहीं लगता यह जवाब 100% सच है। उदाहरण के लिए, एक मुद्रा विनिमय सरणी के लिए, यह {name -> info} जोड़े हो सकता है और नाम को "महत्वपूर्ण" कैसे किया जा सकता है, यानी USD पहला है आदि। निश्चित रूप से आप इन पेरिस को सरणी प्रविष्टियों में डाल सकते हैं, लेकिन फिर सिर्फ एक अतिरिक्त घोंसला है। मेरा मुद्दा यह है कि "शब्दकोश" ऑब्जेक्ट में वस्तुओं के क्रम के अर्थपूर्ण होने के लिए बहुत अच्छे कारण हो सकते हैं। यदि यह जेसन स्पेक का हिस्सा नहीं है, तो spec गलत है, न कि लोग अपनी डेटा संरचना को यथासंभव स्वच्छ और सरल रखना चाहते हैं। –

+0

@ superarts.org: सवाल यह नहीं है कि जावास्क्रिप्ट ऑब्जेक्ट की चाबियाँ * का आदेश दिया जाना चाहिए। प्रश्न एक जावास्क्रिप्ट ऑब्जेक्ट की चाबियाँ हैं * आदेश दिया गया है। और वे नहीं हैं। –

17

आप उपयोग कर सकते हैं कुंजी और मूल्यों को रखने के लिए मानचित्र को क्रमबद्ध करें। इस

public static List listFromJsonSorted(JSONObject json) { 
    if (json == null) return null; 
    SortedMap map = new TreeMap(); 
    Iterator i = json.keys(); 
    while (i.hasNext()) { 
     try { 
      String key = i.next().toString(); 
      JSONObject j = json.getJSONObject(key); 
      map.put(key, j); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    return new LinkedList(map.values()); 
} 
0

की तरह कुछ मैं जबकि जो वर्णानुक्रम 1024+ वेबसाइटों की एक सूची प्रदर्शित करता है मेरी Android एप्लिकेशन में खंड पर काम कर रहे इस समान समस्या बारे में जाना। चूंकि जेसन ट्रैवर्सल क्रमबद्ध क्रम में नहीं था, इसलिए मैंने एक मेज में ट्रैवर्सल के दौरान जेसन मूल्यों को डाला (मैं अपने ऐप में सूची एडेप्टर का उपयोग कर रहा हूं) और कर्सर के साथ वेबसाइटों की क्रमबद्ध सूची प्राप्त की।

तो यदि आप सर्वर से जो कुछ प्राप्त कर रहे हैं उसे सहेज रहे हैं, तो आप अपने इच्छित डेटाबेस में मूल्यों को क्रमबद्ध करने के लिए बस अपने डेटाबेस से पूछ सकते हैं।

+0

हाँ पहली बात ध्यान में आती है कि आपने कहा लेकिन यह निश्चित रूप से समय लगेगा लेकिन मैं जेसन और जावा कार्यों के माध्यम से सॉर्ट करना चाहता हूं –

संबंधित मुद्दे