Dizeyi JSON dizisine dönüştür


92

Bir web hizmetinden aşağıdaki JSON dizesine sahibim ve bunu bir 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"
        }
    ]
}

Bunu Stringçevrimiçi olarak doğruladım , doğru görünüyor. Şimdi kullanmak için android geliştirmede aşağıdaki kodu kullanıyorum

JSONArray jsonArray = new JSONArray(readlocationFeed);

Bu, bir tür uyuşmazlığı özel durumu istisnası atar.


Veri türü nedir readlocationFeed?
IgorGanapolsky

1
@IgorGanapolsky, String
Andrew No

Yanıtlar:


162

Burada JSONObject elde edersiniz, bu yüzden bu satırı değiştirin:

JSONArray jsonArray = new JSONArray(readlocationFeed); 

aşağıdaki ile:

JSONObject jsnobject = new JSONObject(readlocationFeed);

ve sonra

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

JSONObject için yapıcının modası geçmiş göründüğünü ve 1.1.1 sürümünde bir parametre olarak String'i desteklemediğini fark ettim
ankitkpd

jsnobject jsonobject olabilir - yazım :)
DragonFire

41

Giriş Dizesi

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

Dizeyi JSON'a Dönüştürmenin Basit Yolu

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

    }
}

Çıktı

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

24

Json lib kullanarak: -

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 kullanarak: -

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

Bu, Google GSON için çalışmayacak mı? Bunun için yardım edebilir misin?
Pra_A

@pashtika .. lütfen sorununuzu açıklayın..bunu deneyebilirim.
Aravind Cheekkallur

@pashtika .. evet GSON kavanozunu kullanabilir ve dizinizi json'a dönüştürebilirsiniz
Aravind Cheekkallur

3
gsonNesne yaratıldığı ancak kullanılmadığı için 2. kod parçacığında bir hata var gibi görünüyor .
Dev-iL

İlk satırı görmezden gelin. Onunla çalışıyor Gson gson = new Gson();
fritz-playmaker

16

Geçerli Dize aşağıdakiler yerine kök öğe olarak içerdiğinden , verilen dizeyi JSONObjectyerine dönüştürmeniz gerekir :JSONArrayJsonObjectJsonArray

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++) {

}

veya JSONOBJECT'e dönüştürün

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

dize manipülasyonu başka bir yönden düşünmenin harika bir yoludur - bu sorunla ilgili olarak
DragonFire

4

Bu kod parçasını deneyin:

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

cevap böyle ise

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

böyle ayrıştırabilirsin

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

burada JsonArray boyutu 1'dir. Aksi takdirde, değerleri almak için for döngüsünü kullanmalısınız.


1

Aşağıdakileri yapabilirsiniz:

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

1

Dönüştürmenin çok basit bir yolu:

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
Lütfen yorum olarak değil metin olarak bağlam ekleyerek yanıtınızı geliştirin.
Richard Erickson

0

Web hizmetinden aşağıdaki JSON'a sahipseniz, yanıt olarak 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"
    }

Önce bir Json Array olarak Kabul Etmek, ardından Object'i okurken Object Mapper.readValue kullanmak zorunda çünkü Json Object Still in 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, mapper.convert (param, param) kullanıyorsanız, doğru işlevdir. Bu size hata verecektir.


Yukarıdaki gibi JSON'a sahibim ve yukarıdaki görevi Gson kullanarak gerçekleştirmem gerekiyor. Bunu nasıl yapabilirim?
Bishan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.