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

Java 将字符串转换为JSONArray,然后转换为列表,java,android,arrays,json,Java,Android,Arrays,Json,我有字符串“[{…}]”,我想将其转换为JSONArray,然后转换为List List=newlist我正在尝试解决方案,这是我的代码 public void RestoreData() { String toConvert = "[{...}]" // I don't place full String, but it's typical JSONArray, but in String ArrayList<myClass> listdata = new Arra

我有字符串“[{…}]”,我想将其转换为JSONArray,然后转换为
List List=newlist
我正在尝试解决方案,这是我的代码

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));
        }
    }
}
public void RestoreData()
{
String-toConvert=“[{…}]”//我没有放置完整的字符串,但它是典型的JSONArray,但在字符串中
ArrayList listdata=新的ArrayList();
JsonObject JsonObject=新的JsonObject();
JSONArray jArray=(JSONArray)jsonObject;
if(jArray!=null){

对于(int i=0;i我想你想要的是:

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

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

为了简单起见,您还可以使用jacksonapi

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

我认为最好的方法是使用

String toConvert=“[{…}]”
类型listType=newTypeToken(){}.getType();
List yourList=new Gson().fromJson(toConvert,listType);

您不需要手动获取每个职位。

您可以放置一些样本数据以便我们检查吗it@Alok你是什么意思?这个字符串的文本?是的,是字符串的某些部分,以便我们可以检查它是否是有效数据。请给出一个小的(截断的)字符串示例,你说它是“…典型的JSONArray”现在我们需要知道什么是
myClass
。顺便说一句,在java命名约定中,方法不使用大写…但是,类是大写的。我再次得到了“unhandled exception org.json.jsonexception”。在这段代码中是“JSONArray(toConvert)”这意味着你的字符串可能是一个无效的json数组,正如你所说的:是的,对不起,我弄错了。现在看我的问题。我想转换到ArrayList没问题,有些人不明白,如果他们否决某人,解释原因是礼貌的:/i agree@levalbuquerque。我只是不理解人们在不同意的情况下否决有效答案最不用说为什么它被否决了。也许那个人最终会鼓起勇气解释自己!一个向上的投票来补偿。如何使用这个?我必须写一些build.gradle?什么?你必须在build.gralde中添加jackson api的依赖项(就像另一个依赖项一样,使用上面的代码)
ObjectMapper objectMapper = new ObjectMapper();
TypeFactory typeFactory = objectMapper.getTypeFactory();
List<SomeClass> someClassList = objectMapper.readValue(jsonString,typeFactory.constructCollectionType(List.class, SomeClass.class));
String toConvert = "[{...}]"
Type listType = new TypeToken<List<myClass>>() {}.getType();
List<myClass> yourList = new Gson().fromJson(toConvert, listType);