将字符串转换为JSONArray,然后转换为列表

时间:2018-05-05 17:32:50

标签: java android arrays json

我有字符串“[{...}]”,我希望将其转换为JSONArray,然后转换为List list = new List我正在尝试this解决方案,这是我的代码

public void RestoreData()
{
    String toConvert = "[{...}]" // I don't place full String, but it's typical JSONArray, but in String
    ArrayList<myClass> listdata = new ArrayList<myClass>();
    JsonObject jsonObject = new JsonObject();
    JSONArray jArray = (JSONArray)jsonObject;
    if (jArray != null) {
        for (int i=0;i<jArray.length();i++){
            listdata.add(jArray.getString(i));
        }
    }
}

当我尝试编译时,我得到2个错误:

  • JSONArray jArray = (JSONArray)jsonObject;我收到错误'Incovertible类型;无法将'org.json.JSONObject'强制转换为'org.json.JSONArray'。
  • 第二个:在listdata.add(jArray.getString(i));中我收到错误'未处理的异常org.json.JSONException'。

我是Java新手,我第一次与Json合作。

修改 Json字符串的一个小截断示例:

  

[{ “lootArmorGain”:0 “lootBlockGain”:0 “lootCost”:93500 “lootCritGain”:2 “lootCritPowerGain”:0 “lootDamageAbsorptionGain”:0 “lootDamageGain”:0,   }]

3 个答案:

答案 0 :(得分:3)

我认为你想要的是:

public void RestoreData()
{
   try{
    String toConvert = "[{...}]" // I don't place full String, but it's typical JSONArray, but in String
    ArrayList<MyClass> listdata = new ArrayList<MyClass>();
    JSONArray jsonArray = new JSONArray(toConvert); 

    if (jsonArray != null) {
       Gson gson = new Gson();
        for (int i=0;i<jsonArray.length();i++){
            String json = jsonArray.getJSONObject(i).toString();
            MyClass obj = gson.fromJson(json, MyClass.class);
            listdata.add(obj);
        }
    }
    }catch(JSONException e){
          e.printStackTrace();
    }
}

要使用GSON从JSONOject转换为自定义类,请参阅上文。

 compile 'com.google.code.gson:gson:2.8.4'

请注意,您的自定义类需要有一个空的构造函数以及getter和setter才能使gson正常工作。

答案 1 :(得分:1)

我认为最好的方法是使用Google Gson Library

String toConvert = "[{...}]"
Type listType = new TypeToken<List<myClass>>() {}.getType();
List<myClass> yourList = new Gson().fromJson(toConvert, listType);

您无需手动获取每个位置。

答案 2 :(得分:0)

为简单起见,您还可以使用Jackson api

ObjectMapper objectMapper = new ObjectMapper();
TypeFactory typeFactory = objectMapper.getTypeFactory();
List<SomeClass> someClassList = objectMapper.readValue(jsonString,typeFactory.constructCollectionType(List.class, SomeClass.class));