Chuyển đổi chuỗi thành mảng JSON


90

Tôi có chuỗi JSON sau đây từ một dịch vụ web và đang cố chuyển đổi chuỗi này thành 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"
        }
    ]
}

Tôi đã xác nhận điều này Stringtrực tuyến, nó có vẻ là chính xác. Bây giờ tôi đang sử dụng mã sau trong phát triển Android để sử dụng

JSONArray jsonArray = new JSONArray(readlocationFeed);

Điều này ném ra ngoại lệ một kiểu không khớp Exception.


Kiểu dữ liệu là readlocationFeedgì?
IgorGanapolsky

1
@IgorGanapolsky, String
Andrew No

Câu trả lời:


161

Ở đây bạn nhận được JSONObject, vì vậy hãy thay đổi dòng này:

JSONArray jsonArray = new JSONArray(readlocationFeed); 

với sau:

JSONObject jsnobject = new JSONObject(readlocationFeed);

và sau

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

nhận thấy rằng hàm tạo cho JSONObject có vẻ lỗi thời và không hỗ trợ Chuỗi làm tham số trong phiên bản 1.1.1
ankitkpd

jsnobject có thể là jsonobject - đánh vần :)
DragonFire

41

Chuỗi đầu vào

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

Cách đơn giản để chuyển đổi chuỗi thành 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);
        }

    }
}

Đầu ra

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

23

Sử dụng 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);

Sử dụng 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);

Điều này sẽ không hoạt động cho Google GSON? Bạn có thể giúp đỡ cho điều này?
Pra_A

@pashtika .. vui lòng giải thích vấn đề của bạn..vậy thì tôi có thể thử.
Aravind Cheekkallur

@pashtika .. bạn có thể sử dụng lọ GSON và chuyển đổi chuỗi của bạn thành json
Aravind Cheekkallur

3
Dường như có lỗi trong đoạn mã thứ 2, vì gsonđối tượng được tạo nhưng không được sử dụng.
Dev-iL

Chỉ cần bỏ qua dòng đầu tiên. Nó hoạt động với nó Gson gson = new Gson();
fritz-playmaker

16

bạn sẽ cần chuyển đổi chuỗi đã cho thành JSONObjectthay JSONArrayvì vì Chuỗi hiện tại chứa JsonObjectdưới dạng phần tử gốc thay vì 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++) {

}

hoặc chuyển đổi nó trong JSONOBJECT

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

thao tác chuỗi là một cách tuyệt vời để suy nghĩ từ một hướng khác - liên quan đến vấn đề này
DragonFire

4

Hãy thử đoạn mã này:

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

nếu câu trả lời là như thế này

"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ạn có thể phân tích cú pháp như thế này

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

ở đây kích thước JsonArray là 1. Nếu không, bạn nên sử dụng vòng lặp for để nhận các giá trị.


1

Bạn có thể làm như sau:

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

1

Đó là một cách rất đơn giản để chuyển đổi:

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
Vui lòng cải thiện câu trả lời của bạn bằng cách thêm ngữ cảnh dưới dạng văn bản chứ không phải nhận xét.
Richard Erickson

0

Nếu có JSON sau từ dịch vụ web, Json Array như một phản hồi:

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

phải Chấp nhận nó trước tiên dưới dạng Mảng Json, sau đó trong khi đọc Đối tượng của nó phải sử dụng Đối tượng Mapper.readValue, vì Đối tượng Json Vẫn nằm trong Chuỗi.

      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 là chức năng chính xác, nếu bạn sử dụng mapper.convert (param, param). Nó sẽ cung cấp cho bạn lỗi.


Tôi có JSON như trên và tôi cần đạt được nhiệm vụ trên bằng cách sử dụng Gson. Làm thế nào tôi có thể làm điều đó?
Bishan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.