【问题标题】:Convert String to JSONArray (not JsonArray from gson) [duplicate]将字符串转换为 JSONArray(不是来自 gson 的 JsonArray)[重复]
【发布时间】:2013-08-13 15:23:03
【问题描述】:

如何正确地将这个 String 转换为 jsonArray?

{
    "myArray": [
    {   "id": 1,
        "att1": 14.2,
        "att2": false },
    {   "id": 2,
        "att1": 13.2,
        "att2": false },
    {   "id": 3,
        "att1": 13,
        "att2": false }
  ]}

JSONArray jArray = new JSONArray(STRING_FROM_ABOVE); 导致 jArray.length = 1 这是我第一次接触 json :)

【问题讨论】:

  • 字符串是 JSON 对象,而不是数组(注意最外面的大括号)。

标签: java android json


【解决方案1】:

试试这个:

JSONObject jObject = new JSONObject(STRING_FROM_ABOVE);
JSONArray jArray = jObject.getJSONArray("myArray");

"string_from_above" 不是 Json 数组,它是一个 Json 对象,包含一个属性 (myArray),它是一个 Json 数组;)

你可以这样做:

for (int i = 0; i < jArray.length(); i++) {
        JSONObject jObj = jArray.getJSONObject(i);
        System.out.println(i + " id : " + jObj.getInt("id"));
        System.out.println(i + " att1 : " + jObj.getDouble("att1"));
        System.out.println(i + " att2 : " + jObj.getBoolean("att2"));
}

【讨论】:

  • 非常感谢......我真的应该更接近 json 及其语法:)
  • 没问题,不过别忘了接受答案:)
  • 所以你不能说 jArray[i];嗯?
  • 找不到你..我有同样的prb..什么是STRING_FROM_ABOVE?如果 myArray 是 STRING_FROM_ABOVE 那么为什么要在 JSONArray 中写“myArray”...
【解决方案2】:

在解析时,将值添加到对象和 ArrayList 或您想要使用它的方式。祝你好运。

JSONObject jo = new JSONObject(STRING_FROM_ABOVE);
JSONArray rootArray= jo.getJSONArray("myArray");
int rootArrayLength=rootArray.length();
for(int i=0;i<rootArrayLength;i++){
   int id=   rootArray.getJSONObject(i).getInt("id");
   // do same for others too and create an object
}
// create object and make a list

【讨论】:

    【解决方案3】:

    只是为了在这里加入另一种方法,我建议您看看Gson。 Gson 是一个库,它使 Java 对象的序列化和反序列化变得轻而易举。例如,使用您的字符串,您可以这样做:

    // Declare these somewhere that is on the classpath
    public class ArrayItem{
        public int id;
        public double att1;
        public boolean att2;
    }
    
    public class Container{
        public List<ArrayItem> myArray;
    }
    
    // In your code
    Gson gson = new Gson();
    
    Container container = gson.fromJson(json, Container.class);
    
    for(ArrayItem item : container.myArray){
        System.out.println(item.id);  // 1, 2, 3
        System.out.println(item.att1);  // 14.2, 13.2, 13.0
        System.out.println(item.att2);  // false, false, false
    }
    

    同样,你也可以很容易地倒退。

    String jsonString = gson.toJson(container);
    // jsonString no contains something like this:
    // {"myArray":[{"id":1,"att1":14.2,"att2":false},{"id":2,"att1":13.2,"att2":false},{"id":3,"att1":13.0,"att2":false}]}
    

    使用像 Gson 这样的东西提供的主要好处是,您现在可以默认使用 Java 的所有类型检查,而不必自己管理属性名称和类型。它还允许您做一些花哨的事情,例如复制类型层次结构,从而使管理大量 json 消息变得轻而易举。它适用于 Android,而且 jar 本身很小,不需要任何额外的依赖项。

    【讨论】:

      【解决方案4】:

      看看 JQuery,尤其是 Parse 函数。这将直接将 Json Array 解析为 Object。

      【讨论】:

      • 自动更正!无论如何,它在语音上是正确的。
      猜你喜欢
      • 2023-03-21
      • 2015-02-16
      • 1970-01-01
      • 2013-03-30
      • 2011-09-21
      • 2012-04-28
      • 2017-03-14
      • 2013-05-08
      • 1970-01-01
      相关资源
      最近更新 更多