Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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
Gson到普通旧Java对象(POJO)_Java_Json_Pojo - Fatal编程技术网

Gson到普通旧Java对象(POJO)

Gson到普通旧Java对象(POJO),java,json,pojo,Java,Json,Pojo,我已经阅读了GSon用户指南,并在这里查看了一些问题,但我真的很难理解为什么在尝试使用GSon创建java对象时出错 public class TestJSON extends ActionBarActivity { private Location start; private String length; private String url = "http://maps.googleapis.com/maps/api/directions/json?origin="

我已经阅读了GSon用户指南,并在这里查看了一些问题,但我真的很难理解为什么在尝试使用GSon创建java对象时出错

public class TestJSON extends ActionBarActivity {
    private Location start;
    private String length;
    private String url = "http://maps.googleapis.com/maps/api/directions/json?origin=";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_json);

        // dummyprovider is provided by google to let me set a location.
        start = new Location("dummyprovider");
        start.setLatitude(51.5033630);
        start.setLongitude(-0.1276250);

        // Recieve an android warning if you run a retrieval task (such as JSON)
        // in the main thread).
        try {
            System.out.println("printing Json");

            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {

                         toJava(readJsonFromUrl(urlBuilder()));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
            thread.start();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.test_json, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    // I think in future I will call this function a ton of times and send it
    // some locations as waypoints for it to try and get closer to the
    // distances.
    private String urlBuilder() {
        String newUrl = url + start.getLatitude() + "," + start.getLongitude()
                + "&destination=51.5042178,23";

        return newUrl;
    }

    // Builds the string for JSON.
    private String readAll(Reader rd) throws IOException {
        StringBuilder sb = new StringBuilder();
        int cp;
        while ((cp = rd.read()) != -1) {
            sb.append((char) cp);
        }
        return sb.toString();
    }

    // Take an input url and reads from it using the url above. We then put it
    // into a JSON object.
    private JSONObject readJsonFromUrl(String url) throws IOException,
            JSONException {
        InputStream is = new URL(url).openStream();
        try {
            BufferedReader rd = new BufferedReader(new InputStreamReader(is,
                    Charset.forName("UTF-8")));
            String jsonText = readAll(rd);
            JSONObject json = new JSONObject(jsonText);

            return json;
        } finally {
            is.close();
        }
     }

    private void toJava(JSONObject obj) throws Exception {
        Gson gson = new Gson();
        MapsRoute m = gson.fromJson(readJsonFromUrl(urlBuilder()).toString(),
                MapsRoute.class);
        System.out.println(m);

    }

    }
MapsRoute.java

public class MapsRoute {

        @SerializedName("routes")
        public List<String> routes;

        @SerializedName("copyrights")
        public String copyrights;

        @SerializedName("legs")
        public List<String> legs;

        @SerializedName("steps")
        public List<String> steps;

    }
我肯定我误解了一些简单的事情,非常感谢您的指导

这是Google地图试图解析的url,我正在成功地接收它,因为我可以在我的readfromurl方法中对其进行搜索

编辑:这是调用readsFromUrl(urlBuilder())时的输出

09-2419:57:03.879:I/System.out(4068): {“状态”:“确定”,“路线”:[{“航路点\顺序”: [],“概述”:“A2”,“边界”:{“西南”:{“液化天然气”:-0.1262498,“纬度”:50.918706699999}, “东北”:{“lng”:23.0020594,“lat”:52.4304362},“腿”:[{“持续时间”:{“值”:63803,“文本”:“17” 小时43分“}”,距离:{“值”:1825694,“文本”:“1826” km“}”,结束位置:{“lng”:23.0020594,“lat”:51.5038920999999},“开始地址”:“70” 伦敦白厅

SW1A 2AS,英国,“结束地址”:“Orzechów-Kolonia 2,21-109 奥泽科洛尼亚, 波兰,“起始位置”:{“lng”:-0.1262498,“lat”:51.5034032},“通过航路点”:[],“步骤”:[{“html_指令”:“头部” 白厅宫殿北面/白厅/A3212朝向 马卫大街,“持续时间”:{“值”:17,“文本”:“1” 最小“}”,距离:{“值”:157,“文本”:“0.2” km“}”,终点位置:{“lng”:-0.1265332,“lat”:51.504799200001},“多段线”:{“点”:“ggjyH
tW]@cADYD[DUBWFy@PWD},“行驶模式”:“驾驶”,“开始位置”:{“lng”:-0.1262498,“lat”:51.5034032}},{“html_指令”:“转弯”
马上到马卫那里去
平均值,持续时间:{“值”:53,“文本”:“1”
最小“}”,距离:{“值”:242,“文本”:“0.2”
km“}”,终点位置:{“lng”:-0.1231268,“lat”:51.504648900001},“多段线”:{“点”:“{pjyHxuWC]Ei@IgAAQAOAMAK橡木?M?M?K?I?I@I?M@S
@wEPeBBY“},“开始位置”:{“lng”:-0.1265332,“lat”:51.5047992000001},“机动”:“右转”,“行驶模式”:“驾驶”},{“html\U说明”:“转弯” 就在维多利亚 路堤/A3211,“持续时间”:{“值”:49,“文本”:“1” 最小“}”,距离:{“值”:389,“文本”:“0.4” km“}”,终点位置:{“lng”:-0.1239744,“lat”:51.5011942},“多段线”:{“点”:“aojyHp
WxH”~Ab@H
En@~@F@?b@Bl@@“}”,开始位置:{“lng”:-0.1231268,“lat”:51.504648900001},“机动”:“右转”,“行驶模式”:“驾驶”},{“html_指令”:“转弯” 左转入威斯敏斯特桥路/A302离开收费区 区域“,”持续时间“:{”值“:62,“文本“:”1 最小“}”,距离:{“值”:507,“文本”:“0.5” km“}”,终点位置:{“lng”:-0.1170572,“纬度”:51.50053550000001},“多段线”:{“点”:”myiyHxeW@ABABCB?DADCBABCBC@CBEBI?K@E@G@GBw@@}@@qA@q@DkFFkF?KFuAFgAEYC[Ai@?]@g@@iA?u2;?O@U@Q@KBMBGBGP[FM”},“开始位置”:{“lng”:-0.1239744,“lat”:51.5011942},“机动”:“左转”,“行驶模式”:“驾驶”},{“html_说明”:“轻微” 左转停留在威斯敏斯特桥路/A302离开收费站 区域“,”持续时间“:{”值“:4,“文本“:”1 最小“}”,距离:{“值”:26,“文本”:“26” m“},“端点位置”:{“lng”:-0.1167459,“lat”:51.5004276},“多段线”:{“点”:”kuiyHrzUFIBEBG@G@G@G?M“},“开始位置”:{“lng”:-0.1170572,“lat”:51.50053550000001},“机动”:“轻微左转”,“行驶模式”:“驾驶”},{“html_说明”:“转弯” 左,留在威斯敏斯特桥上 Rd/A302,“持续时间”:{“值”:4,“文本”:“1” 最小“}”,距离:{“值”:23,“文本”:“23” m“},“结束位置”:{“lng”:-0.1165272,“lat”:-51.5005834},“多段线”:{“点”:“Utiyhtxuikimik”},“开始位置”:{“lng”:-0.1167459,“lat”:-51.5004276},“机动”:“左转”,“行驶模式”:“驾驶”},{“html\U指令”:“轻微” 在威斯敏斯特大桥停留的权利 Rd/A302,“持续时间”:{“值”:10,“文本”:“1” 最小“}”,距离:{“值”:52,“文本”:“52” m“},“端点位置”:{“lng”:-0.1158714,“lat”:51.5007879},“多段线”:{“点”:”suiyHhwUEa@GUGQQc@AE?G?G“},“开始位置”:{“lng”:-0.1165272,“lat”:51.5005834},“机动”:“稍微向右转弯”,“行驶模式”:“驾驶”},{“html_说明”:“转弯” 在威斯敏斯特桥路/A302上停留的权利继续沿着威斯敏斯特桥行驶 长途电话 区域,“持续时间”:{“值”:93,“文本”:“2” 分钟“}”,距离:{“值”:848,“文本”:“0.8” km“}”,终点位置:{“lng”:-0.1051152,“纬度”:51.498740299999},“多段线”:{“点”:viyHdsU@EBG@E@CBEBCFGNQBMFMLYZm@b@o@d@o@FUDKd@oAXe@Vs@~@iCN[DKFKDGBGJYb@_B\mBRiAHa@BO@我?G@E?G@UBe@@]克莫伊亚奥?K?G??EGyAAe@EoAIwCKyCEoAAa@GiBIc@CQCW},“开始位置”:{“lng”:-0.1158714,“lat”:51.5007879},“机动”:“右转”,“行驶模式”:“DR”


嘿,Java对象与json的映射是不正确的


示例:routes有边界、分支、版权、步骤,而不是上面代码中映射的方式。

不看任何东西,
期望一个字符串,但BEGIN\u OBJECT
对您意味着什么?调试并显示您从
readJsonFromUrl()返回的
json
。它似乎不是一个有效的JSon对象。或者至少对您的解析器无效。@SotiriosDelimanolis nothing这就是我寻求帮助的原因:)谷歌搜索表明这是因为我的字符串数据结构错误,但其他示例似乎使用了我的设置。我认为您应该停止正在执行的所有操作并进行检查。您不能期望JSon对象要映射到Java
字符串的ct
@Narmer在调试过程中添加了sys。请简要说明正确的方法。定义路由类、绑定类、步骤类、腿部类。路由类有绑定类的对象、步骤类、字符串类型的版权、腿部类的对象。现在您将其用作大纲。确定了吗应该有一个公共列表路由,然后路由应该为其他每个部分都有列表?建议:尝试使用与json中相同的名称。这样会减少混淆和更好地理解。它很容易映射。但是我的方法正确吗?路由包含边界、版权和legs对象。legs对象包含steps对象等?
  09-24 19:22:47.367: W/System.err(1720): com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 27
09-24 19:22:47.367: W/System.err(1720):     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176)
09-24 19:22:47.367: W/System.err(1720):     at com.google.gson.Gson.fromJson(Gson.java:803)
09-24 19:22:47.367: W/System.err(1720):     at com.google.gson.Gson.fromJson(Gson.java:768)
09-24 19:22:47.367: W/System.err(1720):     at com.google.gson.Gson.fromJson(Gson.java:717)
09-24 19:22:47.367: W/System.err(1720):     at com.google.gson.Gson.fromJson(Gson.java:689)
09-24 19:22:47.367: W/System.err(1720):     at boyle.matt.runrouter.TestJSON.toJava(TestJSON.java:119)
09-24 19:22:47.367: W/System.err(1720):     at boyle.matt.runrouter.TestJSON.access$2(TestJSON.java:117)
09-24 19:22:47.371: W/System.err(1720):     at boyle.matt.runrouter.TestJSON$1.run(TestJSON.java:47)
09-24 19:22:47.371: W/System.err(1720):     at java.lang.Thread.run(Thread.java:856)
09-24 19:22:47.371: W/System.err(1720): Caused by: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 27
09-24 19:22:47.371: W/System.err(1720):     at com.google.gson.stream.JsonReader.nextString(JsonReader.java:821)
09-24 19:22:47.371: W/System.err(1720):     at com.google.gson.internal.bind.TypeAdapters$13.read(TypeAdapters.java:358)
09-24 19:22:47.371: W/System.err(1720):     at com.google.gson.internal.bind.TypeAdapters$13.read(TypeAdapters.java:346)
09-24 19:22:47.371: W/System.err(1720):     at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)
09-24 19:22:47.371: W/System.err(1720):     at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:81)
09-24 19:22:47.371: W/System.err(1720):     at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:60)
09-24 19:22:47.371: W/System.err(1720):     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93)
09-24 19:22:47.371: W/System.err(1720):     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172)
09-24 19:22:47.371: W/System.err(1720):     ... 8 more