如何解析Android中的JSON数组(非Json对象)

Ste*_*Bra 82 java arrays android json gson

我找不到如何解析JSONArray的方法.它看起来像这样:

[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"},...]
Run Code Online (Sandbox Code Playgroud)

如果JSON的编写方式不同,我知道如何解析它(换句话说,如果我返回了json对象而不是对象数组).但这就是我所拥有的并且必须与它一起去.

*编辑:这是一个有效的json.我使用这个json制作了一个iPhone应用程序,现在我需要为Android做这个并且无法解决它.有很多例子,但它们都与JSONObject相关.我需要JSONArray的东西.

有人可以给我一些提示,或教程或示例吗?

非常感激 !

Spr*_*ker 135

使用以下代码片段来解析JsonArray.

JSONArray jsonarray = new JSONArray(jsonStr);
for (int i = 0; i < jsonarray.length(); i++) {
    JSONObject jsonobject = jsonarray.getJSONObject(i);
    String name = jsonobject.getString("name");
    String url = jsonobject.getString("url");
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.


vil*_*e89 25

我只想给杰克逊一个例子:

首先创建一个包含JSON字符串字段的数据持有者

// imports
// ...
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyDataHolder {
    @JsonProperty("name")
    public String mName;

    @JsonProperty("url")
    public String mUrl;
}
Run Code Online (Sandbox Code Playgroud)

并解析MyDataHolders的列表

String jsonString = // your json
ObjectMapper mapper = new ObjectMapper();
List<MyDataHolder> list = mapper.readValue(jsonString, 
    new TypeReference<ArrayList<MyDataHolder>>() {});
Run Code Online (Sandbox Code Playgroud)

使用列表项

String firstName = list.get(0).mName;
String secondName = list.get(1).mName;
Run Code Online (Sandbox Code Playgroud)


Max*_*tin 19

public static void main(String[] args) throws JSONException {
    String str = "[{\"name\":\"name1\",\"url\":\"url1\"},{\"name\":\"name2\",\"url\":\"url2\"}]";

    JSONArray jsonarray = new JSONArray(str);


    for(int i=0; i<jsonarray.length(); i++){
        JSONObject obj = jsonarray.getJSONObject(i);

        String name = obj.getString("name");
        String url = obj.getString("url");

        System.out.println(name);
        System.out.println(url);
    }   
}   
Run Code Online (Sandbox Code Playgroud)

输出:

name1
url1
name2
url2
Run Code Online (Sandbox Code Playgroud)


Kev*_*sox 11

创建一个类来保存对象.

public class Person{
   private String name;
   private String url;
   //Get & Set methods for each field
}
Run Code Online (Sandbox Code Playgroud)

然后反序列化如下:

Gson gson = new Gson();
Person[] person = gson.fromJson(input, Person[].class); //input is your String
Run Code Online (Sandbox Code Playgroud)

参考文章: http ://blog.patrickbaumann.com/2011/11/gson-array-deserialization/


nil*_*ash 6

public class CustomerInfo 
{   
    @SerializedName("customerid")
    public String customerid;
    @SerializedName("picture")
    public String picture;

    @SerializedName("location")
    public String location;

    public CustomerInfo()
    {}
}
Run Code Online (Sandbox Code Playgroud)

当你得到结果时;像这样解析

List<CustomerInfo> customers = null;
customers = (List<CustomerInfo>)gson.fromJson(result, new TypeToken<List<CustomerInfo>>() {}.getType());
Run Code Online (Sandbox Code Playgroud)


Tha*_*ana 5

在这个例子中,一个json数组中有几个对象.那是,

这是json数组:[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"},...]

这是一个对象:{"name":"name1","url":"url1"}

假设您已将结果传递给名为jSonResultString的String变量:

JSONArray arr = new JSONArray(jSonResultString);

  //loop through each object
  for (int i=0; i<arr.length(); i++){

  JSONObject jsonProductObject = arr.getJSONObject(i);
  String name = jsonProductObject.getString("name");
  String url = jsonProductObject.getString("url");


}
Run Code Online (Sandbox Code Playgroud)