2011-12-31 25 views
5

मैंने उपयोगकर्ता परिभाषित ऑब्जेक्ट की सामान्य सरणी से एक JSON ऐरे बनाया है। मैं JSONArray को उपयोगकर्ता द्वारा परिभाषित प्रकार की सामान्य सरणी में कैसे परिवर्तित करूं ..? मैं इस कोड मैं नेट पर पाया android.Using में साझा वरीयता के लिए Json उपयोग कर रहा हूँ:JSONArray को सामान्य ऐरे में परिवर्तित करना

import org.json.JSONObject; 
import org.json.JSONArray; 
import org.json.JSONException; 

import android.content.Context; 
import android.content.SharedPreferences; 

public class JSONSharedPreferences { 
    private static final String PREFIX = "json"; 

    public static void saveJSONObject(Context c, String prefName, String key, JSONObject object) { 
     SharedPreferences settings = c.getSharedPreferences(prefName, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putString(JSONSharedPreferences.PREFIX+key, object.toString()); 
     editor.commit(); 
    } 

    public static void saveJSONArray(Context c, String prefName, String key, JSONArray array) { 
     SharedPreferences settings = c.getSharedPreferences(prefName, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putString(JSONSharedPreferences.PREFIX+key, array.toString()); 
     editor.commit(); 
    } 

    public static JSONObject loadJSONObject(Context c, String prefName, String key) throws JSONException { 
     SharedPreferences settings = c.getSharedPreferences(prefName, 0); 
     return new JSONObject(settings.getString(JSONSharedPreferences.PREFIX+key, "{}")); 
    } 

    public static JSONArray loadJSONArray(Context c, String prefName, String key) throws JSONException { 
     SharedPreferences settings = c.getSharedPreferences(prefName, 0); 
     return new JSONArray(settings.getString(JSONSharedPreferences.PREFIX+key, "[]")); 
    } 

    public static void remove(Context c, String prefName, String key) { 
     SharedPreferences settings = c.getSharedPreferences(prefName, 0); 
     if (settings.contains(JSONSharedPreferences.PREFIX+key)) { 
      SharedPreferences.Editor editor = settings.edit(); 
      editor.remove(JSONSharedPreferences.PREFIX+key); 
      editor.commit(); 
     } 
    } 
} 

मैं jsonarray, जो उपयोगकर्ता को परिभाषित वस्तु सरणी परिवर्तित करने के लिए कोशिश कर रहा है और jsonshared वरीयता में भंडारण और बाद में कोशिश कर रहा हूँ इसे पुनः प्राप्त करने के लिए। समस्या को सहेजना यह जानना कि इसे कैसे पुनः प्राप्त करना है। धन्यवाद।

+1

जो जेएसओएन लाइब्रेरी आप उपयोग कर रहे हैं? उन विवरणों को जल्दी से आपके प्रश्न का उत्तर देने में मददगार होगा। – kosa

+0

विवरण के साथ संपादित करें। – shady2020

उत्तर

0

यदि आप JSONObject का उपयोग कर रहे हैं जो एंड्रॉइड के साथ आता है तो उपयोगकर्ता परिभाषित प्रकारों से JSONObject/JSONArray में फिर से परिवर्तित करने के लिए यह कठिन है। वहाँ अन्य पुस्तकालय हैं जो इस परिवर्तन को स्वचालित रूप से करेंगे ताकि JSON को डीकोड/एन्कोड करने के लिए यह एक या दो पंक्ति हो।

ProductLineItem lineItem = ...; 
JSONObject json = new JSONObject(); 
json.put("name", lineItem.getName()); 
json.put("quantity", lineItem.getCount()); 
json.put("price", lineItem.getPrice()); 
... // do this for each property in your user defined class 
String jsonStr = json.toString(); 

यह सब ProductLineItem.toJSON() के भीतर encapsulated किया जा सकता है। पार्सिंग समान है। ProductLineItem obj = नए ProductLineItem (JSONObject):: मैं एक निर्माता है कि एक JSONObject लेता है और जैसे वस्तु बनाता है बनाना चाहते

public class ProductLineItem { 
    private String name; 
    private int quantity; 
    private float price; 

    public MyObject(JSONObject json) { 
     name = json.getString("name"); 
     count = json.getInt("quantity"); 
     price = json.optFloat("price"); 
    } 
} 

सरणियों हैंडलिंग बहुत ज्यादा एक ही है। तो कुछ ऐसा:

public class ShoppingCart { 

    float totalPrice; 
    List<Rebate> rebates = new ArrayList<Rebate>(); 
    List<ProductLineItem> lineItems = new ArrayList<ProductLineItem>(); 


    public ShoppingCart(JSONObject json) { 
     totalPrice = json.getFloat("totalPrice"); 

     for(JSONObject rebateJson : json.getArray("rebates")) { 
      rebates.add(new Rebate(rebateJson)); 
     } 

     for(JSONObject productJson : json.getArray("lineItems")) { 
      lineItems.add(new ProductLineItem(productJson)); 
     } 
    } 

    public JSONObject toJSON() { 
     JSONObject json = new JSONObject(); 
     json.put("totalPrice", totalPrice); 

     JSONArray rebatesArray = new JSONArray(); 
     for(Rebate rebate : rebates) { 
      rebatesArray.put(rebate.toJSON()); 
     } 

     JSONArray lineItemsArray = new JSONArray(); 
     for(ProductLineItem lineItem : lineItems) { 
      lineItemsArray.put(lineItem.toJSON()); 
     } 

     json.put("rebates", rebatesArray); 
     json.put("lineItems", lineItemsArray); 

     return json; 
    } 
} 

आप केवल एक साधारण 2 ऑब्जेक्ट्स के लिए देख सकते हैं यह बॉयलर प्लेट कोड काफी महत्वपूर्ण है। तो अगर आप ऐसा करने के लिए जारी रख सकते हैं या आप एक पुस्तकालय है कि आप के लिए यह सब संभालती उपयोग कर सकते हैं:

http://flexjson.sourceforge.net

// serialize 
String json = new JSONSerializer().serialize(shoppingCart); 
// deserialize 
ShoppingCart cart = new JSONDeserializer<ShoppingCart>().deserialize(json, ShoppingCart.class); 
+0

इसने मेरे प्रश्न का सबसे अच्छा जवाब दिया। हालांकि मैं अपने उद्देश्यों के लिए सामान्य साझा प्राथमिकताओं का उपयोग कर गया हूं। मैं एक साधारण उच्च स्कोर सिस्टम को लागू करना चाहता था। मुझे लगा कि यह साझा किए गए एक स्ट्रिंग में स्कोर और विवरण संग्रहीत किया जा सकता है वरीयताओं और फिर इसे आगमन के दौरान पार्सिंग। – shady2020

+0

आप निश्चित रूप से जेसन स्ट्रिंग को साझा वरीयताओं में लिख सकते हैं जैसे आप ऊपर इस विधि का उपयोग करना चाहते थे। JSON libs का उपयोग करना अनिवार्य रूप से कोड की समान राशि है जो सीधे साझा किए गए prefs पर लिख रहा है। यह आपके मॉडल से JSON या साझा किए गए prefs से अपनी ऑब्जेक्ट्स का अनुवाद करने के लिए लगभग एक ही अनुवाद कोड है। – chubbsondubs

0

मैं गूगल के gson पुस्तकालय का उपयोग किया है अतीत में यह करने के लिए। यहां देखें: http://code.google.com/p/google-gson/

0

मुझे लगता है कि आपके JSON सरणी में एक ही आदिम प्रकार (स्ट्रिंग, int, float इत्यादि) के कई उदाहरण होते हैं - यदि नहीं तो आपको समस्याएं आ रही हैं)। उपयुक्त प्रतिस्थापन बनाने

String[] strArray = new String[jsonArray.length()]; 

for (int i = 0; i < jsonArray.length(); i++) { 
    strArray[i] = jsonArray.getString(i); 
} 

जाहिर है यदि आप अन्य आदिम प्रकार के साथ काम कर रहे हैं:

जो मामले में आप (तार की एक सरणी कल्पना करते हुए) कुछ इस तरह करने की जरूरत है।

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