97

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

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

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

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

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

非常感激 !

4

11 回答 11

159

使用以下代码段来解析 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");
}
于 2013-09-24T09:05:55.357 回答
27

我只举一个杰克逊的例子:

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

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

    @JsonProperty("url")
    public String mUrl;
}

并解析 MyDataHolders 列表

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;
于 2013-09-24T10:01:49.320 回答
22
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
于 2013-09-24T09:12:07.110 回答
12

创建一个类来保存对象。

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/

于 2013-09-24T09:08:01.363 回答
6
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());
于 2013-09-24T09:09:27.943 回答
6

在这个例子中,一个 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");


}
于 2013-09-24T09:09:56.413 回答
3

已经提到了一些很好的建议。使用 GSON 确实很方便,为了让生活更轻松,你可以试试这个网站 ,它叫做 jsonschema2pojo,它就是这样做的:

你给它你的json,它会生成一个可以粘贴到你的项目中的java对象。您可以选择 GSON 来注释您的变量,因此从您的 json 中提取对象变得更加容易!

于 2014-11-03T15:56:40.980 回答
2

我的案例从服务器加载示例..

int jsonLength = Integer.parseInt(jsonObject.getString("number_of_messages"));
            if (jsonLength != 1) {
                for (int i = 0; i < jsonLength; i++) {
                    JSONArray jsonArray = new JSONArray(jsonObject.getString("messages"));
                    JSONObject resJson = (JSONObject) jsonArray.get(i);
                    //addItem(resJson.getString("message"), resJson.getString("name"), resJson.getString("created_at"));
                }
于 2015-11-04T07:56:44.247 回答
-1

为列表中的对象创建一个 POJO Java 类,如下所示:

class NameUrlClass{
       private String name;
       private String url;
       //Constructor
       public NameUrlClass(String name,String url){
              this.name = name;
              this.url = url; 
        }
}

现在只需创建一个 NameUrlClass 列表并将其初始化为 ArrayList,如下所示:

List<NameUrlClass> obj = new ArrayList<NameUrlClass>;

您可以使用将 JSON 数组存储在此对象中

obj = JSONArray;//[{"name":"name1","url":"url1"}{"name":"name2","url":"url2"},...]
于 2018-10-24T11:17:04.120 回答
-3

我知道旧帖子,但除非我误解了这个问题,否则这应该可以解决问题:

s = '[{"name":"name1","url":"url1"},{"name":"name2","url":"url2"}]';
eval("array=" + s);
for (var i = 0; i < array.length; i++) {
for (var index in array[i]) {
    alert(array[i][index]);
}

}

于 2015-11-09T10:34:28.613 回答
-3
            URL url = new URL("your URL");
            connection = (HttpURLConnection) url.openConnection();
            connection.connect();
            InputStream stream = connection.getInputStream();
            BufferedReader reader;
            reader = new BufferedReader(new InputStreamReader(stream));
            StringBuffer buffer = new StringBuffer();
            String line = "";
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }

            //setting the json string
            String finalJson = buffer.toString();

            //this is your string get the pattern from buffer.
            JSONArray jsonarray = new JSONArray(finalJson);
于 2016-01-30T14:31:41.760 回答