我有字符串“[{...}]”,我希望将其转换为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, }]
答案 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));