有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在Android中解析JSON数组(不是JSON对象)

我很难找到解析JSONArray的方法。 看起来是这样的:

[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"},...]

如果JSON的编写方式不同(换句话说,如果返回的是JSON对象而不是对象数组),我知道如何解析它。 但这是我所拥有的一切,我必须去做

*编辑:它是一个有效的json。我用这个json制作了一个iPhone应用程序,现在我需要为Android做这个程序,但我想不出来。 有很多例子,但它们都与JSONObject相关。我需要些东西给JSONArray

有人能给我一些提示,或者一个教程或者一个例子吗

非常感谢


共 (6) 个答案

  1. # 1 楼答案

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

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

    List<CustomerInfo> customers = null;
    customers = (List<CustomerInfo>)gson.fromJson(result, new TypeToken<List<CustomerInfo>>() {}.getType());
    
  2. # 2 楼答案

    使用以下代码段来解析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");
    }
    
  3. # 3 楼答案

    我只举一个小例子:

    首先创建一个数据持有者,其中包含来自JSON字符串的字段

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

    并解析MyDataholder的列表

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

    使用列表项

    String firstName = list.get(0).mName;
    String secondName = list.get(1).mName;
    
  4. # 4 楼答案

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

    输出:

    name1
    url1
    name2
    url2
    
  5. # 5 楼答案

    在本例中,一个json数组中有多个对象。就是

    这是json数组:[{“name”:“name1”,“url”:“url1”},{“name”:“name2”,“url”:“url2”},…]

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

    假设已将结果添加到名为jSonResultString的字符串变量:

    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");
    
    
    }
    
  6. # 6 楼答案

    创建一个类来保存对象

    public class Person{
       private String name;
       private String url;
       //Get & Set methods for each field
    }
    

    然后反序列化如下:

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

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