Konvertieren Sie eine Zeichenfolge in ein JSON-Array


87

Ich habe die folgende Zeichenfolge eines JSON von einem Webdienst und versuche, diese in eine zu konvertieren 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"
        }
    ]
}

Ich habe dies Stringonline validiert , es scheint korrekt zu sein. Jetzt verwende ich den folgenden Code in der Android-Entwicklung, um ihn zu verwenden

JSONArray jsonArray = new JSONArray(readlocationFeed);

Dies löst eine Ausnahme aus, bei der der Typ nicht übereinstimmt.


Welcher Datentyp ist readlocationFeed?
IgorGanapolsky

1
@IgorGanapolsky, String
Andrew No

Antworten:


157

Hier erhalten Sie JSONObject, ändern Sie also diese Zeile:

JSONArray jsonArray = new JSONArray(readlocationFeed); 

mit folgenden:

JSONObject jsnobject = new JSONObject(readlocationFeed);

und danach

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

Es wurde festgestellt, dass der Konstruktor für JSONObject veraltet aussieht und String als Parameter in Version 1.1.1
ankitkpd

jsnobject könnte jsonobject sein - Rechtschreibung :)
DragonFire

40

Eingabezeichenfolge

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

Einfache Möglichkeit, einen String in JSON zu konvertieren

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);
        }

    }
}

Ausgabe

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

23

Verwenden von 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);

Verwenden von 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);

Dies wird nicht für Google GSON funktioniert? Könnten Sie dabei helfen?
Pra_A

@pashtika .. bitte erkläre mit deinem Problem..dann kann ich das versuchen.
Aravind Cheekkallur

@pashtika ..yes Sie können das GSON-Glas verwenden und Ihre Zeichenfolge in json
Aravind Cheekkallur

3
Es scheint einen Fehler im 2. Code-Snippet zu geben, da das gsonObjekt erstellt, aber nicht verwendet wird.
Dev-iL

Ignorieren Sie einfach die erste Zeile. Es funktioniert ohne es Gson gson = new Gson();
Fritz-Spielmacher

16

Sie müssen die angegebene Zeichenfolge in konvertieren, JSONObjectanstatt, JSONArrayda die aktuelle Zeichenfolge JsonObjectanstelle von 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++) {

}

oder konvertieren Sie es in JSONOBJECT

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

String-Manipulation ist eine großartige Möglichkeit, aus einer anderen Richtung zu denken - in Bezug auf dieses Problem
DragonFire

4

Versuchen Sie diesen Code:

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

wenn die Antwort so ist

"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}]"

Sie können so analysieren

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

Hier ist die JsonArray-Größe 1. Andernfalls sollten Sie die for-Schleife verwenden, um Werte abzurufen.


1

Sie können Folgendes tun:

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

1

Es ist eine sehr einfache Art zu konvertieren:

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
Bitte verbessern Sie Ihre Antwort, indem Sie den Kontext als Text und nicht als Kommentar hinzufügen.
Richard Erickson

0

Wenn Sie JSON vom Webdienst folgen, Json Array als Antwort:

       [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"
    }

Sie müssen es zuerst als Json-Array akzeptieren und dann beim Lesen des Objekts Object Mapper.readValue verwenden, da sich das Json-Objekt noch in der Zeichenfolge befindet.

      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 ist die richtige Funktion, wenn Sie mapper.convert (param, param) verwenden. Es wird u Fehler geben.


Ich habe JSON wie oben und ich muss die obige Aufgabe mit Gson erfüllen. Wie könnte ich das machen?
Bishan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.