स्ट्रिंग को JSON सरणी में बदलें


90

मेरे पास एक वेब सेवा से JSON का निम्नलिखित स्ट्रिंग है और इसे एक में बदलने की कोशिश कर रहा हूं JSONarray

{
    "locations": [
        {
            "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        },
        {
            "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        },
        {
            "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        },
        {
            "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        },
        {
            "lat": "23.053",
            "long": "72.629",
            "location": "ABC",
            "address": "DEF",
            "city": "Ahmedabad",
            "state": "Gujrat",
            "phonenumber": "1234567"
        }
    ]
}

मैंने इसे Stringऑनलाइन सत्यापित किया है , यह सही प्रतीत होता है। अब मैं उपयोग करने के लिए android विकास में निम्नलिखित कोड का उपयोग कर रहा हूं

JSONArray jsonArray = new JSONArray(readlocationFeed);

यह एक प्रकार का बेमेल अपवाद अपवाद है।


डेटा प्रकार क्या है readlocationFeed?
इगोरगानापोलस्की

1
@IgorGanapolsky, String
एंड्रयू

जवाबों:


160

यहाँ आपको JSONObject मिलता है इसलिए इस लाइन को बदलें:

JSONArray jsonArray = new JSONArray(readlocationFeed); 

निम्नलिखित के साथ:

JSONObject jsnobject = new JSONObject(readlocationFeed);

और बाद में

JSONArray jsonArray = jsnobject.getJSONArray("locations");
for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject explrObject = jsonArray.getJSONObject(i);
}

ध्यान दिया कि JSONObject के लिए कंस्ट्रक्टर पुराना लगता है और संस्करण 1.1.1 में एक पैरामीटर के रूप में स्ट्रिंग का समर्थन नहीं करता है
अंकित

jsnobject jsonobject हो सकता है - वर्तनी :)
DragonFire

41

इनपुट स्ट्रिंग

[
   {
      "userName": "sandeep",
      "age": 30
   }, 
   {
      "userName": "vivan",
      "age": 5
   }
]

स्ट्रिंग को JSON में कनवर्ट करने का सरल तरीका

public class Test
{

    public static void main(String[] args) throws JSONException
    {
        String data = "[{\"userName\": \"sandeep\",\"age\":30},{\"userName\": \"vivan\",\"age\":5}]  ";
        JSONArray jsonArr = new JSONArray(data);

        for (int i = 0; i < jsonArr.length(); i++)
        {
            JSONObject jsonObj = jsonArr.getJSONObject(i);

            System.out.println(jsonObj);
        }

    }
}

उत्पादन

{"userName":"sandeep","age":30}
{"userName":"vivan","age":5}

23

Json lib का उपयोग करना: -

String data="[{"A":"a","B":"b","C":"c","D":"d","E":"e","F":"f","G":"g"}]";
Object object=null;
JSONArray arrayObj=null;
JSONParser jsonParser=new JSONParser();
object=jsonParser.parse(data);
arrayObj=(JSONArray) object;
System.out.println("Json object :: "+arrayObj);

GSON lib का उपयोग करना: -

Gson gson = new Gson();
String data="[{\"A\":\"a\",\"B\":\"b\",\"C\":\"c\",\"D\":\"d\",\"E\":\"e\",\"F\":\"f\",\"G\":\"g\"}]";
JsonParser jsonParser = new JsonParser();
JsonArray jsonArray = (JsonArray) jsonParser.parse(data);

यह Google GSON के लिए काम नहीं किया जाएगा? आप इस thhis के लिए मदद कर सकता है?
प्र

@ पश्तिका .. कृपया अपनी समस्या के साथ समझाएं..तब मैं उसके लिए प्रयास कर सकता हूं।
अरविंद चेक्कल्लूर

@ पश्तिका ..हाँ आप GSON जार का उपयोग कर सकते हैं और अपने स्ट्रिंग को
जसन

3
दूसरा कोड स्निपेट में एक गलती प्रतीत होता है, क्योंकि gsonऑब्जेक्ट बनाया जाता है, लेकिन उपयोग नहीं किया जाता है।
देव-आईएल

बस पहली पंक्ति को नजरअंदाज करें। यह इसके साथ काम करता है Gson gson = new Gson();
fritz-playmaker

16

आप को दी स्ट्रिंग परिवर्तित करने की आवश्यकता होगी JSONObjectके बजाय JSONArrayक्योंकि वर्तमान स्ट्रिंग शामिल JsonObjectमूल तत्व के रूप में के बजाय JsonArray:

JSONObject jsonObject = new JSONObject(readlocationFeed);

5
String b = "[" + readlocationFeed + "]";
JSONArray jsonArray1 = new JSONArray(b);
jsonarray_length1 = jsonArray1.length();
for (int i = 0; i < jsonarray_length1; i++) {

}

या इसे JSONOBJECT में रूपांतरित करें

JSONObject jsonobj = new JSONObject(readlocationFeed);
JSONArray jsonArray = jsonobj.getJSONArray("locations");

स्ट्रिंग हेरफेर एक और दिशा से सोचने का एक शानदार तरीका है - इस समस्या के बारे में
ड्रैगनफायर

4

कोड का यह टुकड़ा आज़माएं:

try {        
    Log.e("log_tag", "Error in convert String" + result.toString());
    JSONObject json_data = new JSONObject(result);

    String status = json_data.getString("Status");
    {
        String data = json_data.getString("locations");
        JSONArray json_data1 = new JSONArray(data);
        for (int i = 0; i < json_data1.length(); i++) {
            json_data = json_data1.getJSONObject(i);

            String lat = json_data.getString("lat");
            String lng = json_data.getString("long");
        }
    }
}

3

अगर प्रतिक्रिया इस तरह है

"GetDataResult": "[{\"UserID\":1,\"DeviceID\":\"d1254\",\"MobileNO\":\"056688\",\"Pak1\":true,\"pak2\":true,\"pak3\":false,\"pak4\":true,\"pak5\":true,\"pak6\":false,\"pak7\":false,\"pak8\":true,\"pak9\":false,\"pak10\":true,\"pak11\":false,\"pak12\":false}]"

आप इस तरह से पार्स कर सकते हैं

JSONObject jobj=new JSONObject(response);
        String c = jobj.getString("GetDataResult");         
        JSONArray jArray = new JSONArray(c);
        deviceId=jArray.getJSONObject(0).getString("DeviceID");

यहाँ JsonArray का आकार 1. है। आपको मान प्राप्त करने के लिए लूप के लिए उपयोग करना चाहिए।



1

इसे बदलने का एक बहुत ही सरल तरीका है:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;


class Usuario {
private String username;
private String email;
private Integer credits;
private String twitter_username;

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public Integer getCredits() {
    return credits;
}

public void setCredits(Integer credits) {
    this.credits = credits;
}

public String getTwitter_username() {
    return twitter_username;
}

public void setTwitter_username(String twitter_username) {
    this.twitter_username = twitter_username;
}

@Override
public String toString() {
    return "UserName: " + this.getUsername() + " Email: " + this.getEmail();
}

}

/*
 * put string into file jsonFileArr.json
 * [{"username":"Hello","email":"hello@email.com","credits"
 * :"100","twitter_username":""},
 * {"username":"Goodbye","email":"goodbye@email.com"
 * ,"credits":"0","twitter_username":""},
 * {"username":"mlsilva","email":"mlsilva@email.com"
 * ,"credits":"524","twitter_username":""},
 * {"username":"fsouza","email":"fsouza@email.com"
 * ,"credits":"1052","twitter_username":""}]
 */

public class TestaGsonLista {

public static void main(String[] args) {
    Gson gson = new Gson();
    try {
        BufferedReader br = new BufferedReader(new FileReader(
                "C:\\Temp\\jsonFileArr.json"));
        JsonArray jsonArray = new JsonParser().parse(br).getAsJsonArray();
        for (int i = 0; i < jsonArray.size(); i++) {
            JsonElement str = jsonArray.get(i);
            Usuario obj = gson.fromJson(str, Usuario.class);
            System.out.println(obj);
            System.out.println(str);
            System.out.println("-------");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}


1
कृपया संदर्भ को टेक्स्ट के रूप में जोड़कर उत्तर दें और टिप्पणी न करें।
रिचर्ड एरिकसन

0

यदि वेब सेवा से JSON का अनुसरण किया जा रहा है, तो प्रतिक्रिया के रूप में Json Array:

       [3]
 0:  {
 id: 2
 name: "a561137"
 password: "test"
 firstName: "abhishek"
 lastName: "ringsia"
 organization: "bbb"
    }-
1:  {
 id: 3
 name: "a561023"
 password: "hello"
 firstName: "hello"
  lastName: "hello"
  organization: "hello"
 }-
 2:  {
  id: 4
  name: "a541234"
  password: "hello"
  firstName: "hello"
  lastName: "hello"
  organization: "hello"
    }

पहले इसे Json Array के रूप में स्वीकार करना है, फिर इसके ऑब्जेक्ट को पढ़ते समय ऑब्जेक्ट Mapper.readValue का उपयोग करना है, क्योंकि Json ऑब्जेक्ट स्टिलिंग में है।

      List<User> list = new ArrayList<User>();
      JSONArray jsonArr = new JSONArray(response);


      for (int i = 0; i < jsonArr.length(); i++) {
        JSONObject jsonObj = jsonArr.getJSONObject(i);
         ObjectMapper mapper = new ObjectMapper();
        User usr = mapper.readValue(jsonObj.toString(), User.class);      
        list.add(usr);

    }

mapper.read सही फंक्शन है, अगर u mapper.convert (परम, परम) का उपयोग करते हैं। यह यू एरर देगा।


मेरे पास ऊपर JSON है और मुझे Gson का उपयोग करके उपरोक्त कार्य को प्राप्त करने की आवश्यकता है। ऐसा कैसे किया जा सकता था?
बिशन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.