แปลงสตริงเป็นอาร์เรย์ JSON


94

ฉันมีสตริง 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);

สิ่งนี้ทำให้เกิดข้อยกเว้นประเภทที่ไม่ตรงกัน Exception


ประเภทข้อมูลคือreadlocationFeedอะไร?
IgorGanapolsky

1
@IgorGanapolsky, String
Andrew No

คำตอบ:


165

ที่นี่คุณได้รับ 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 ดูล้าสมัยและไม่รองรับ String เป็นพารามิเตอร์ในเวอร์ชัน 1.1.1
ankitkpd

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}

24

ใช้ 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? คุณช่วยได้ไหม
Pra_A

@pashtika .. ช่วยอธิบายด้วยปัญหา.. แล้วจะลองทำดู
Aravind Cheekkallur

@pashtika .. ใช่คุณสามารถใช้ GSON jar และแปลงสตริงของคุณเป็น json
Aravind Cheekkallur

3
ดูเหมือนจะมีข้อผิดพลาดในข้อมูลโค้ดที่ 2 เนื่องจากgsonอ็อบเจ็กต์ถูกสร้างขึ้น แต่ไม่ได้ใช้
Dev-iL

เพียงแค่ไม่สนใจบรรทัดแรก มันใช้งานได้จริง 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");

การจัดการสตริงเป็นวิธีคิดที่ยอดเยี่ยมจากทิศทางอื่น - เกี่ยวกับปัญหานี้
DragonFire

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

คุณสามารถทำสิ่งต่อไปนี้:

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

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
โปรดปรับปรุงคำตอบของคุณโดยเพิ่มบริบทเป็นข้อความไม่ใช่แสดงความคิดเห็น
Richard Erickson

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 จากนั้นในขณะที่อ่าน Object ต้องใช้ Object Mapper.readValue เนื่องจาก Json Object Still อยู่ใน 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) มันจะทำให้คุณมีข้อผิดพลาด


ฉันมี JSON เหมือนข้างบนและฉันต้องการบรรลุภารกิจข้างต้นโดยใช้ Gson ฉันจะทำอย่างนั้นได้อย่างไร?
Bishan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.