Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中使用改型解析嵌套json对象_Android_Json_Retrofit - Fatal编程技术网

如何在Android中使用改型解析嵌套json对象

如何在Android中使用改型解析嵌套json对象,android,json,retrofit,Android,Json,Retrofit,我想使用改型来解析嵌套的items对象。 这是我的目标 { "items":{ "Veg Main Course":[ { "category":"27013046129796342702616905670", "description":"", "price":100.0, "

我想使用改型来解析嵌套的items对象。 这是我的目标

        {  
       "items":{  
          "Veg Main Course":[  
             {  
                "category":"27013046129796342702616905670",
                "description":"",
                "price":100.0,
                "name":"Aloo 65"
             },
             {  
                "category":"27013046129796342702616905670",
                "description":"",
                "price":100.0,
                "name":"Finger Chips"
             },
             {  
                "category":"27013046129796342702616905670",
                "description":"",
                "price":100.0,
             }
         ],
     "Bityanis":[  
         {  
            "category":"27013046129796342702616905670",
            "description":"",
            "price":100.0,
            "name":"Aloo 65"
         },
         {  
            "category":"27013046129796342702616905670",
            "description":"",
            "price":100.0,
            "name":"Finger Chips"
         },
         {  
            "category":"27013046129796342702616905670",
            "description":"",
            "price":100.0,
         }
     ]
.
.
.
So on...
    }
我的改装模型如下所示

public class RetroData {
    public Map<String,Menu> items;
}
public class Menu {
    public Map<String, ItemArray> cat_menu;

}
public class ItemArray {
    public ArrayList<MenuItem> itemArray;

}
public class MenuItem {

    public String category;
    public String description;
    public String price;
    public String is_active;
    public String id;
    public String disabled;
    public String sales_count;
    public String image;
    public String name;


}

如您所见,错误状态为“预期的BEGIN\u对象,但为BEGIN\u数组”。在RetroData类中,您希望“items”是字符串和菜单(对象)类型的映射,但在响应中,您没有得到菜单对象,而是得到了菜单项的数组

试试这个:

public class RetroData {
public Map<String,List<MenuItem>> items;
}


public class MenuItem {
    public String category;
    public String description;
    public String price;
    public String is_active;
    public String id;
    public String disabled;
    public String sales_count;
    public String image;
    public String name;
}
公共类数据{
公共地图项目;
}
公共类菜单项{
公共字符串类别;
公共字符串描述;
公共字符串价格;
公共字符串处于活动状态;
公共字符串id;
禁用公共字符串;
公共字符串销售计数;
公共字符串图像;
公共字符串名称;
}
希望这能奏效。
另外,我没有亲自测试过。

你能发布你的错误吗?@maddesa谢谢。我刚刚添加了有问题的错误片段。你能看到吗?谢谢你,沙尚克。成功了。(y) 我犯了这个愚蠢的错误。
06-26 22:16:21.136 4194-4194/com.example.adam.myfirstapp W/System.err: retrofit.RetrofitError: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 32 path $.items.
06-26 22:16:21.136 4194-4194/com.example.adam.myfirstapp W/System.err:     at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:383)
06-26 22:16:21.136 4194-4194/com.example.adam.myfirstapp W/System.err:     at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220)
06-26 22:16:21.136 4194-4194/com.example.adam.myfirstapp W/System.err:     at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:278)
06-26 22:16:21.136 4194-4194/com.example.adam.myfirstapp W/System.err:     at retrofit.CallbackRunnable.run(CallbackRunnable.java:42)
06-26 22:16:21.136 4194-4194/com.example.adam.myfirstapp W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
06-26 22:16:21.136 4194-4194/com.example.adam.myfirstapp W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
06-26 22:16:21.136 4194-4194/com.example.adam.myfirstapp W/System.err:     at retrofit.Platform$Android$2$1.run(Platform.java:142)
06-26 22:16:21.136 4194-4194/com.example.adam.myfirstapp W/System.err:     at java.lang.Thread.run(Thread.java:818)
06-26 22:16:21.136 4194-4194/com.example.adam.myfirstapp W/System.err: Caused by: retrofit.converter.ConversionException: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 32 path $.items.
06-26 22:16:21.137 4194-4194/com.example.adam.myfirstapp W/System.err:     at retrofit.converter.GsonConverter.fromBody(GsonConverter.java:67)
06-26 22:16:21.137 4194-4194/com.example.adam.myfirstapp W/System.err:     at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:367)
06-26 22:16:21.137 4194-4194/com.example.adam.myfirstapp W/System.err:  ... 7 more
06-26 22:16:21.137 4194-4194/com.example.adam.myfirstapp W/System.err: Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 32 path $.items.
06-26 22:16:21.139 4194-4194/com.example.adam.myfirstapp W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:200)
06-26 22:16:21.140 4194-4194/com.example.adam.myfirstapp W/System.err:     at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)
06-26 22:16:21.140 4194-4194/com.example.adam.myfirstapp W/System.err:     at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:187)
06-26 22:16:21.141 4194-4194/com.example.adam.myfirstapp W/System.err:     at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145)
06-26 22:16:21.141 4194-4194/com.example.adam.myfirstapp W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:103)
06-26 22:16:21.141 4194-4194/com.example.adam.myfirstapp W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:196)
06-26 22:16:21.141 4194-4194/com.example.adam.myfirstapp W/System.err:     at com.google.gson.Gson.fromJson(Gson.java:810)
06-26 22:16:21.141 4194-4194/com.example.adam.myfirstapp W/System.err:     at com.google.gson.Gson.fromJson(Gson.java:775)
06-26 22:16:21.141 4194-4194/com.example.adam.myfirstapp W/System.err:     at retrofit.converter.GsonConverter.fromBody(GsonConverter.java:63)
06-26 22:16:21.141 4194-4194/com.example.adam.myfirstapp W/System.err:  ... 8 more
06-26 22:16:21.141 4194-4194/com.example.adam.myfirstapp W/System.err: Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 32 path $.items.
06-26 22:16:21.141 4194-4194/com.example.adam.myfirstapp W/System.err:     at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:387)
06-26 22:16:21.141 4194-4194/com.example.adam.myfirstapp W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:189)
06-26 22:16:21.141 4194-4194/com.example.adam.myfirstapp W/System.err:  ... 16 more
public class RetroData {
public Map<String,List<MenuItem>> items;
}


public class MenuItem {
    public String category;
    public String description;
    public String price;
    public String is_active;
    public String id;
    public String disabled;
    public String sales_count;
    public String image;
    public String name;
}