Using Gson to parse Json array and object with no name

前端 未结 4 1108
执念已碎
执念已碎 2021-02-15 23:02

I know there are many JSON with GSON questions but none of them relate to me directly. My JSON is formatted differently.

I have a JSON data I want to parse using GSON wh

相关标签:
4条回答
  • 2021-02-15 23:35

    Some times we get JsonArray [ {..} , {..} ] as a response (without 'itemArray' name like yours) In that case you can use following code

    Type fooType = new TypeToken<ArrayList<Item>>() {}.getType();
    List<Item> array = new Gson().fromJson(response, fooType);
    

    find more about this Official doc - Gson Array-Examples

    0 讨论(0)
  • 2021-02-15 23:36

    According to your json, you should simply have :

    public class ItemArray extends List<Item> {
    }
    

    if you want to keep you java class and change your json it should be :

    {
     itemArray: [
         {
          "foo":"1",
          "bar":[ { "_id":"bar1"} ],
          "too":["mall", "park"]
         }
      ]
    }
    

    Oh, and there is a mismatch with the id and _id for Bar :

    public class Bar
    {
       String _id;
    
       //Get set here
    }
    

    You could also use an annotation to change the field's name during Json de/serialization.

    And last but not least, consider typing your values better. Don't see any data as strings if they are not, you will not a lot of processing in java code to convert things. For instance :

    "foo" : 1,
    

    and see foo as an int data member, not a String.

    0 讨论(0)
  • 2021-02-15 23:40

    To check Json is valid use this tool http://jsonlint.com/

    Class Bar(
       private String _id;
       //create getter/setters
    {
    
    public class Item
    {
       String foo;
       List<Bar> bar;
       List<String> too;
    
       //Get set here
    }
    //this is also fine
    public class ItemList
    {
       List<Item> itemArray;
    
       //Get set here
    }
    

    you named of list of items "itemArray", but in your json you have not named the corresponding array of items "itemArray". So make it itemArray, The problem is not in your json, it is valid. Problem is in its representation for Gson, Gson map keys of json on the variables of object (i.e Java POJO) with same name. If the name of your list is Class is

    List<Item> itemArray;
    

    then the corresponding json array name should also be itemArray, take a look blow

    {
     itemArray: [
         {
          "foo":"1",
          "bar":[ { "_id":"bar1"} ],
          "too":["mall", "park"]
         }
      ]
    }
    

    so you can convert json into object like that

     Reader reader = new InputStreamReader(IOUtils.toInputStream(json_string));
     ItemList itemList = json.toObject(reader, ItemList.class);
    

    Take a look into blow reference for more details https://stackoverflow.com/questions/13625206/how-to-parse-the-result-in-java/13625567#13625567

    0 讨论(0)
  • 2021-02-15 23:51

    If you have a JsonArray like [ {..} , {..} ] you can do this with Gson:

    Item[] items = gson.fromJson(json, Item[].class);
    
    0 讨论(0)
提交回复
热议问题