Android 将JSON解析为字符串行

Android 将JSON解析为字符串行,android,json,django,google-maps,retrofit,Android,Json,Django,Google Maps,Retrofit,我使用改型从GoogleMapsAPI获取一条路由,它返回一个JSON,但我需要一个字符串行,有办法解析它吗?我使用android studio,目前我可以接收JSON对象,但我需要它作为一条字符串线,以便能够获取地图中的所有点和绘制路线。 另外,我的后端服务器使用的是DJANGO,有没有一种方法可以使用DJANGO实现,或者在android手机上实现更简单? 如果找到了如何使用httpurlconnections与BufferedInputStream和BufferedReader进行连接,但

我使用改型从GoogleMapsAPI获取一条路由,它返回一个JSON,但我需要一个字符串行,有办法解析它吗?我使用android studio,目前我可以接收JSON对象,但我需要它作为一条字符串线,以便能够获取地图中的所有点和绘制路线。 另外,我的后端服务器使用的是DJANGO,有没有一种方法可以使用DJANGO实现,或者在android手机上实现更简单? 如果找到了如何使用httpurlconnections与BufferedInputStream和BufferedReader进行连接,但是我需要使用改进,谢谢

以下是httpurlconnections的代码:

public class JSONParser {

    String charset = "UTF-8";
    HttpURLConnection conn;
    DataOutputStream wr;
    StringBuilder result;
    URL urlObj;
    JSONObject jObj = null;
    StringBuilder sbParams;
    String paramsString;

    public JSONObject makeHttpRequest(String url, String method,
                                      HashMap<String, String> params, boolean encode) {

        sbParams = new StringBuilder();
        int i = 0;
        for (String key : params.keySet()) {
            try {
                if (i != 0){
                    sbParams.append("&");
                }
                if (encode) {
                    sbParams.append(key).append("=")
                            .append(URLEncoder.encode(params.get(key), charset));
                }
                else{
                    sbParams.append(key).append("=")
                            .append(params.get(key));
                }

            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            i++;
        }
        if(method.equals("GET")){
            // request method is GET

            if (sbParams.length() != 0) {
                url += "?" + sbParams.toString();
            }

            Log.d("JSONParser", "full GET url: " + url);

            try {
                urlObj = new URL(url);

                conn = (HttpURLConnection) urlObj.openConnection();

                conn.setDoOutput(false);

                conn.setRequestMethod("GET");

                conn.setRequestProperty("Accept-Charset", charset);

                conn.setConnectTimeout(15000);

                conn.connect();

            } catch (IOException e) {
                e.printStackTrace();
            }

        }

        try {
            //Receive the response from the server
            InputStream in = new BufferedInputStream(conn.getInputStream());
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));

            String line;
            result = new StringBuilder();
            while ((line = reader.readLine()) != null) {
                result.append(line);
            }

            Log.d("JSON Parser", "result: " + result.toString());

        } catch (IOException e) {
            e.printStackTrace();
        }

        conn.disconnect();

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(result.toString());
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON Object
        return jObj;
    }
}
公共类JSONParser{
字符串charset=“UTF-8”;
httpurl连接连接;
数据输出流;
结果;
URL-urlObj;
JSONObject jObj=null;
字符串生成器sbParams;
字符串参数字符串;
公共JSONObject makeHttpRequest(字符串url、字符串方法、,
HashMap参数,布尔编码){
sbParams=新的StringBuilder();
int i=0;
for(字符串键:params.keySet()){
试一试{
如果(i!=0){
sbParams.append(“&”);
}
如果(编码){
sbParams.append(键).append(“”)
.append(URLEncoder.encode(params.get(key),charset));
}
否则{
sbParams.append(键).append(“”)
.append(参数get(键));
}
}捕获(不支持的编码异常e){
e、 printStackTrace();
}
i++;
}
if(method.equals(“GET”)){
//请求方法是GET
如果(sbParams.length()!=0){
url+=“?”+sbParams.toString();
}
d(“JSONParser”,“完整获取url:+url”);
试一试{
urlObj=新URL(URL);
conn=(HttpURLConnection)urlObj.openConnection();
连接设置输出(假);
conn.setRequestMethod(“GET”);
conn.setRequestProperty(“接受字符集”,字符集);
连接设置连接超时(15000);
连接();
}捕获(IOE异常){
e、 printStackTrace();
}
}
试一试{
//从服务器接收响应
InputStream in=新的BufferedInputStream(conn.getInputStream());
BufferedReader reader=新的BufferedReader(新的InputStreamReader(in));
弦线;
结果=新的StringBuilder();
而((line=reader.readLine())!=null){
结果。追加(行);
}
Log.d(“JSON解析器”,“结果:+result.toString());
}捕获(IOE异常){
e、 printStackTrace();
}
连接断开();
//尝试将字符串解析为JSON对象
试一试{
jObj=新的JSONObject(result.toString());
}捕获(JSONException e){
Log.e(“JSON解析器”,“错误解析数据”+e.toString());
}
//返回JSON对象
返回jObj;
}
}
下面是我从服务器获得的json示例:

{
  "routes": [
    {
      "overview_polyline": {
        "points": "ei||BhfgvRbAs@rAqAx@_AjAeB^w@v@uBv@_DJo@vAx@`DhBp@^rAiINo@n@iB\iAxC`BjBlA~@f@~NnIfDjBz@d@nEjCL?XA~GzD`FrCFJLHrA`ApD`Cx@d@d@TxAv@fIpEdFvC~DzBrKjGdLtG~HrEfI~EtAx@fDjBdQ~JvCdB`EvBjGpDvMzH~MzHvAz@jPjJrJtFpJnFdE|BjHfEt@b@hBbAtGtD`E~BjEjCnHhEtD|BdH|D~NnIrPtJxHjErDxBtQbKb@ZPVFF~BpAtLbHb@X^m@BYp@sBx@uBpCd@"
      },
      "warnings": [],
      "bounds": {
        "northeast": {
          "lat": 20.6301062,
          "lng": -103.4199452
        },
        "southwest": {
          "lat": 20.5577814,
          "lng": -103.4636853
        }
      },
      "waypoint_order": [],
      "summary": "Av. López Mateos Sur/México 15",
      "copyrights": "Map data ©2015 Google, INEGI",
      "legs": [
        {
          "distance": {
            "text": "9.9 km",
            "value": 9878
          },
          "end_address": "Calle Ramon Corona 705, 45640 San Agustín, Jal., Mexico",
          "via_waypoint": [],
          "start_address": "Corona Boreal 4144, Arboledas, 45070 Zapopan, Jal., Mexico",
          "duration": {
            "text": "14 mins",
            "value": 833
          },
          "steps": [
            {
              "html_instructions": "Head <b>southeast</b> on <b>Corona Boreal</b> toward <b>Sirio</b>",
              "distance": {
                "text": "0.4 km",
                "value": 442
              },
              "travel_mode": "DRIVING",
              "start_location": {
                "lat": 20.6301062,
                "lng": -103.4251706
              },
              "polyline": {
                "points": "ei||BhfgvRBATOTORQXUPSRSRS\_@Z_@t@gAT]Ra@JUZw@Z}@Nk@HYLk@Nm@Jo@"
              },
              "duration": {
                "text": "2 mins",
                "value": 94
              },
              "end_location": {
                "lat": 20.6278997,
                "lng": -103.4217575
              }
            },
            {
              "html_instructions": "Turn <b>right</b> onto <b>Calle Sagitario</b>",
              "distance": {
                "text": "0.2 km",
                "value": 182
              },
              "maneuver": "turn-right",
              "duration": {
                "text": "1 min",
                "value": 40
              },
              "travel_mode": "DRIVING",
              "polyline": {
                "points": "k{{|B~pfvRvAx@xAz@fAl@\R"
              },
              "start_location": {
                "lat": 20.6278997,
                "lng": -103.4217575
              },
              "end_location": {
                "lat": 20.6265019,
                "lng": -103.4226761
              }
            },
            {
              "html_instructions": "Turn <b>left</b> at the 3rd cross street onto <b>Galileo Galilei</b>",
              "distance": {
                "text": "0.3 km",
                "value": 322
              },
              "maneuver": "turn-left",
              "duration": {
                "text": "1 min",
                "value": 54
              },
              "travel_mode": "DRIVING",
              "polyline": {
                "points": "sr{|BvvfvRRJdAyGLo@F[FSDQh@wA\iA"
              },
              "start_location": {
                "lat": 20.6265019,
                "lng": -103.4226761
              },
              "end_location": {
                "lat": 20.6255063,
                "lng": -103.4199452
              }
            },
            {
              "html_instructions": "Turn <b>right</b> onto <b>Av. López Mateos Sur</b> (signs for <b>Colima</b>/<b>Periferico</b>)",
              "distance": {
                "text": "0.8 km",
                "value": 832
              },
              "maneuver": "turn-right",
              "duration": {
                "text": "1 min",
                "value": 87
              },
              "travel_mode": "DRIVING",
              "polyline": {
                "points": "ml{|BtefvRxC`B\TlAv@`@RB@NHHFz@d@xAx@pFbDvBjATLFBdCtABB`@RXPnEjC"
              },
              "start_location": {
                "lat": 20.6255063,
                "lng": -103.4199452
              },
              "end_location": {
                "lat": 20.6191352,
                "lng": -103.4241374
              }
            },
            {
              "html_instructions": "Keep <b>left</b> to continue on <b>Av. López Mateos Sur</b>/<b>México 15</b>",
              "distance": {
                "text": "7.4 km",
                "value": 7421
              },
              "maneuver": "keep-left",
              "duration": {
                "text": "7 mins",
                "value": 436
              },
              "travel_mode": "DRIVING",
              "polyline": {
                "points": "sdz|Bz_gvRL?F?PAxCdBdCtA`FrCFJBBHDBBnA|@pClB^R\RNHJFB@`@Rh@Tn@`@rEfCrBhAnBfAtBnAzA|@bB|@xJzFXNpEhC\R`DjBRJv@b@nAr@dAl@pBlAFBjBjAn@^|@h@dAn@TL?@HD@@JFJDz@h@r@`@TLLHnAp@|BrAx@d@vAv@tBnAnAr@`@VLH~@f@~BtAVNbAh@|BlAn@^@@nCzAhAr@j@\rBjAlEhChBfA|@f@zDvB~D`Cd@XPJdAn@bFtCfItEbAj@f@XnC|AvBpAjAp@hCvAx@f@`B|@h@\zC~AdDlBdCxATJ\T@@VLDDPJx@b@xAx@@@`B|@vAz@pC`Bn@\nAx@zBpA~BtAb@VtAv@t@b@zCfBXTjBfAxDtBt@`@lAr@f@ZrI|EhFxCf@ZhCzAvCbBjAn@bAj@v@d@pBhA`Al@d@X^Rj@\l@\fCvAhGlDtC~Ab@Z"
              },
              "start_location": {
                "lat": 20.6191352,
                "lng": -103.4241374
              },
              "end_location": {
                "lat": 20.5623663,
                "lng": -103.4615311
              }
            },
            {
              "html_instructions": "Slight <b>right</b> toward <b>Calle Ramon Corona</b>",
              "distance": {
                "text": "0.4 km",
                "value": 392
              },
              "maneuver": "turn-slight-right",
              "duration": {
                "text": "1 min",
                "value": 52
              },
              "travel_mode": "DRIVING",
              "polyline": {
                "points": "yao|BpinvRPV@BDBXPn@\b@VPH|ChB~ChBf@ZnAr@"
              },
              "start_location": {
                "lat": 20.5623663,
                "lng": -103.4615311
              },
              "end_location": {
                "lat": 20.5594138,
                "lng": -103.4635603
              }
            },
            {
              "html_instructions": "Turn <b>left</b> onto <b>Calle Ramon Corona</b>",
              "distance": {
                "text": "0.2 km",
                "value": 204
              },
              "maneuver": "turn-left",
              "duration": {
                "text": "1 min",
                "value": 48
              },
              "travel_mode": "DRIVING",
              "polyline": {
                "points": "ion|BfvnvRb@X^m@BS?E?E@C@El@cBb@gATm@"
              },
              "start_location": {
                "lat": 20.5594138,
                "lng": -103.4635603
              },
              "end_location": {
                "lat": 20.5585096,
                "lng": -103.4621585
              }
            },
            {
              "html_instructions": "Turn <b>right</b>",
              "distance": {
                "text": "83 m",
                "value": 83
              },
              "maneuver": "turn-right",
              "duration": {
                "text": "1 min",
                "value": 22
              },
              "travel_mode": "DRIVING",
              "polyline": {
                "points": "uin|BnmnvRpCd@"
              },
              "start_location": {
                "lat": 20.5585096,
                "lng": -103.4621585
              },
              "end_location": {
                "lat": 20.5577814,
                "lng": -103.4623513
              }
            }
          ],
          "start_location": {
            "lat": 20.6301062,
            "lng": -103.4251706
          },
          "end_location": {
            "lat": 20.5577814,
            "lng": -103.4623513
          }
        }
      ]
    }
  ],
  "status": "OK",
  "geocoded_waypoints": [
    {
      "place_id": "ChIJp57B1EOsKIQR9oV6baimz3w",
      "geocoder_status": "OK",
      "types": [
        "street_address"
      ]
    },
    {
      "place_id": "EjlDYWxsZSBSYW1vbiBDb3JvbmEgNzA1LCA0NTY0MCBTYW4gQWd1c3TDrW4sIEphbC4sIE3DqXhpY28",
      "geocoder_status": "OK",
      "types": [
        "street_address"
      ]
    }
  ]
}
{
“路线”:[
{
“多段线概述”:{
“点”:“ei”||BhfgvRbAs@rAqAx@_阿贾布^w@v@uBv@_DJo@vAx ` DhBp@^rAiINo@n@iB\iAxC`BjBlA~@f@~NnIfDjBz@d@nEjCL?XA~GzD`FrCFJLHrA`ApD`Cx@d@d@TxAv@fIpEdFvC~DzBrKjGdLtG~HrEfI~EtAx@fDjBdQ~JvCdB`EvBjGpDvMzH~MzHvAz@jPjJrJtFpJnFdE|BjHfEt@b@hBbAtGtD`E~BjEjCnHhEtD | BdH | D~NnIrPtJxHjErDxBtQbKb@ZPVFF~BpAtLbHb@X^m@BYp@sBx@uBpCd@"
},
“警告”:[],
“界限”:{
“东北”:{
“lat”:20.6301062,
“液化天然气”:-103.4199452
},
“西南”:{
“lat”:20.5577814,
“液化天然气”:-103.4636853
}
},
“航路点顺序”:[],
“摘要”:“墨西哥滨海洛佩斯大道15号”,
“版权”:“地图数据©2015谷歌,INEGI”,
“腿”:[
{
“距离”:{
“文本”:“9.9公里”,
“价值”:9878
},
“结束地址”:“Calle Ramon Corona 705,45640圣阿古斯丁,墨西哥”,
“经_航路点”:[],
“起始地址”:“墨西哥日航扎波潘45070号Arboledas Corona Boreal 4144”,
“期限”:{
“文本”:“14分钟”,
“价值”:833
},
“步骤”:[
{
“html_说明”:“朝东南方向,沿着科罗纳北风向西里奥驶去”,
“距离”:{
“文本”:“0.4公里”,
“价值”:442
},
“行驶模式”:“驾驶模式”,
“开始位置”:{
“lat”:20.6301062,
“液化天然气”:-103.4251706
},
“多段线”:{
“点”:“ei | | BHFGVRBATORQXUPSRS \@UZ”_@t@gAT]Ra@JUZw@Z}@Nk@HYLk@Nm@Jo@"
},
“期限”:{
“文本”:“2分钟”,
“价值”:94
},
“结束位置”:{
“lat”:20.6278997,
“液化天然气”:-103.4217575
}
},
{
“html_说明”:“右转到Calle Sagitario”,
“距离”:{
“文本”:“0.2公里”,
“价值”:182
},
“机动”:“右转”,
“期限”:{
“文本”:“1分钟”,
“价值”:40
},
“行驶模式”:“驾驶模式”,
“多段线”:{
“点”:“k{{124; B~pfvRvAx@xAz@fAl@\R“
},
“开始位置”:{
“lat”:20.6278997,
“液化天然气”:-103.4217575
},
“结束位置”:{
“lat”:20.6265019,
“液化天然气”:-103.4226761
}
},