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