2013-03-25 133 views
44

我有一個Web服務的JSON的下面的字符串,我試圖將其轉換爲一個JSON陣列字符串轉換爲JSON數組

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

我在網上驗證此字符串,它似乎是正確的。現在我在Android開發中使用以下代碼來利用

JSONArray jsonArray = new JSONArray(readlocationFeed); 

這引發了typemismatch的異常。

我沒有理解這個問題,因爲我是Android和java的新手。

+0

什麼數據類型是'readlocationFeed'? – 2016-03-23 18:21:11

+0

@IgorGanapolsky,字符串 – 2016-04-20 17:54:48

回答

105

在這裏,你得到的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); 
} 
14

你將需要給定的字符串轉換爲JSONObject,而不是JSONArray因爲當前字符串包含JsonObject作爲根元素,而不是JsonArray

JSONObject jsonObject = new JSONObject(readlocationFeed); 
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
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"); 
14

使用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); 
+0

這對Google GSON不起作用嗎?你能幫助這個嗎? – Prateek 2015-05-01 10:57:46

+0

@pashtika ..請解釋你的問題..然後我可以嘗試。 – 2015-05-04 07:25:02

+0

@pashtika ..yes你可以使用GSON jar並將你的字符串轉換成json – 2015-05-04 08:25:29

1

如果響應是這樣

"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.Otherwise你應該使用for循環獲取值。

0

如果從Web服務,JSON數組作爲響應具有以下JSON:

 [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數組,然後一邊讀它的對象必須使用對象Mapper.readValue,因爲Json的對象仍然在字符串中。

 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)。它會給你錯誤。

+0

我有上面的JSON,我需要使用Gson來完成上述任務。我怎麼能這樣做? – Bishan 2018-01-18 12:14:50

1

你可以做到以下幾點:

JSONArray jsonArray = jsnobject.getJSONArray("locations"); 
    for (int i = 0; i < jsonArray.length(); i++) { 
     JSONObject explrObject = jsonArray.getJSONObject(i); 
} 
0
//A very simple way to convert 
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(); 
    } 
} 

}

+0

一個非常簡單的轉換方法。 – 2015-10-22 23:21:04

+0

請通過添加上下文作爲文本而不是評論來改善您的答案。 – 2015-10-22 23:38:50

16

輸入字符串

[ 
    { 
     "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} 
+0

我的JSON採用了您推薦的格式。工作得很好! – partho 2017-09-14 14:22:47