Ubah string menjadi array JSON

92

Saya memiliki string JSON berikut dari layanan web dan saya mencoba mengonversinya menjadi 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"
        }
    ]
}

Saya memvalidasi ini Stringsecara online, tampaknya benar. Sekarang saya menggunakan kode berikut dalam pengembangan android untuk memanfaatkan

JSONArray jsonArray = new JSONArray(readlocationFeed);

Ini memunculkan pengecualian jenis ketidakcocokan Exception.

Ashish Kasma
sumber
Tipe data apa itu readlocationFeed?
IgorGanapolsky
1
@IgorGanapolsky, String
Andrew No

Jawaban:

162

Di sini Anda mendapatkan JSONObject jadi ubah baris ini:

JSONArray jsonArray = new JSONArray(readlocationFeed); 

dengan berikut ini:

JSONObject jsnobject = new JSONObject(readlocationFeed);

dan kemudian

JSONArray jsonArray = jsnobject.getJSONArray("locations");
for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject explrObject = jsonArray.getJSONObject(i);
}
kyogs
sumber
perhatikan bahwa konstruktor untuk JSONObject terlihat usang dan tidak mendukung String sebagai parameter di versi 1.1.1
ankitkpd
jsnobject bisa jadi jsonobject - spelling :)
DragonFire
41

String Input

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

Cara Sederhana untuk Mengonversi String ke 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);
        }

    }
}

Keluaran

{"userName":"sandeep","age":30}
{"userName":"vivan","age":5}
Sandeep Bhardwaj
sumber
24

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

Menggunakan 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);
Aravind Cheekkallur
sumber
Ini tidak akan berhasil untuk Google GSON? Bisakah Anda membantu untuk ini?
Pra_A
@pashtika .. tolong jelaskan masalah anda..kemudian saya bisa mencobanya.
Aravind Cheekkallur
@pashtika .. ya, Anda dapat menggunakan jar GSON dan mengubah string Anda menjadi json
Aravind Cheekkallur
3
Tampaknya ada kesalahan dalam cuplikan kode ke-2, karena gsonobjek dibuat tetapi tidak digunakan.
Dev-iL
Abaikan saja baris pertama. Ini berhasil tanpa itu Gson gson = new Gson();
fritz-playmaker
16

Anda perlu mengonversi string yang diberikan menjadi JSONObjectalih-alih JSONArraykarena String saat ini berisi JsonObjectelemen root alih-alih JsonArray:

JSONObject jsonObject = new JSONObject(readlocationFeed);
ρяσѕρєя K
sumber
5
String b = "[" + readlocationFeed + "]";
JSONArray jsonArray1 = new JSONArray(b);
jsonarray_length1 = jsonArray1.length();
for (int i = 0; i < jsonarray_length1; i++) {

}

atau ubah di JSONOBJECT

JSONObject jsonobj = new JSONObject(readlocationFeed);
JSONArray jsonArray = jsonobj.getJSONArray("locations");
Furqi
sumber
manipulasi string adalah cara berpikir yang bagus dari arah lain - mengenai masalah ini
DragonFire
4

Coba bagian kode ini:

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");
        }
    }
}
Nirav Ranpara
sumber
3

jika responnya seperti ini

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

Anda bisa mengurai seperti ini

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

di sini ukuran JsonArray adalah 1. Jika tidak, Anda harus menggunakan for loop untuk mendapatkan nilai.

Sanu
sumber
1

Anda dapat melakukan hal berikut:

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

Ini cara yang sangat sederhana untuk mengonversi:

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":"[email protected]","credits"
 * :"100","twitter_username":""},
 * {"username":"Goodbye","email":"[email protected]"
 * ,"credits":"0","twitter_username":""},
 * {"username":"mlsilva","email":"[email protected]"
 * ,"credits":"524","twitter_username":""},
 * {"username":"fsouza","email":"[email protected]"
 * ,"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();
    }
}

}

Marlon Leite de Albuquerque
sumber
1
Harap perbaiki jawaban Anda dengan menambahkan konteks sebagai teks dan bukan komentar.
Richard Erickson
0

Jika mengikuti JSON dari layanan web, Json Array sebagai respons:

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

harus menerimanya terlebih dahulu sebagai Json Array, kemudian saat membaca Object-nya harus menggunakan Object Mapper.readValue, karena Json Object Masih dalam String.

      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 adalah fungsi yang benar, jika Anda menggunakan mapper.convert (param, param). Ini akan memberi Anda kesalahan.

abhishek ringsia
sumber
Saya memiliki JSON seperti di atas dan saya harus menyelesaikan tugas di atas menggunakan Gson. Bagaimana saya bisa melakukan itu?
Bishan