Android应用中如何解析获取的json数据

发布时间:2020-11-24 17:10:08

来源:亿速云

阅读:107

作者:Leah

这篇文章将为大家详细讲解有关Android应用中如何解析获取的json数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

第一步:根据指定的URL从google 服务器上获得包含地址的json格式的数据(其还提供xml格式的,但json解析效率比xml高)

private static StringBuffer getJSONData(String urlPath){

try {

URL url = new URL(urlPath);

HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

httpURLConnection.setReadTimeout(5000);

httpURLConnection.setRequestMethod("GET");

if(httpURLConnection.getResponseCode() == 200){

InputStream inputStream = httpURLConnection.getInputStream();

InputStreamReader isr = new InputStreamReader(inputStream);

BufferedReader br = new BufferedReader(isr);

String temp = null;

StringBuffer jsonsb = new StringBuffer();

while((temp = br.readLine()) != null){

jsonsb.append(temp);

}

return jsonsb;

}

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

传入经纬度作为参数

/**

* 根据经纬度获得地址

* @param latitude

* @param longitude

* @return

*/

public static StringBuffer getCurrentAddressByGPS(long latitude,long longitude){

StringBuffer stringBuffer = new StringBuffer();

stringBuffer.append(GOOGLE_GPS_PREFIX).append(latitude).append(",")

.append(longitude).append(GOOGLE_GPS_SUFFIX);

return getJSONData(stringBuffer.toString());

}

第三,解析json数据:

public static boolean parseAddressJSON(StringBuffer sb){

try {

if(sb != null){

JSONObject jsonAllData = new JSONObject(sb.toString());

/**

* 获得一个长度为1的JSON数组,如:[{数据内容}]

*/

String placemarkStr = jsonAllData.getString("Placemark");

/**

* 将placemarkStr数组类型字符串构造成一个JSONArray对象

*/

JSONArray placemarkArray = new JSONArray(placemarkStr);

/**

* Placemark标签内容是一个长度为1的数组,获得数组的内容并转换成字符串

*/

String jsonDataPlacemarkStr = placemarkArray.get(0).toString();

/**

* 对上面得到的JSON数据类型的字符串(jsonDataPlacemarkStr)进行解析

*/

JSONObject jsonDataPlacemark = new JSONObject(jsonDataPlacemarkStr);

/**

* 获得标签AddressDetails的JSON数据

*/

String jsonAddressDetails = jsonDataPlacemark.getString("AddressDetails");

/**

* 对上面得到的JSON数据类型的字符串(jsonAddressDetails)进行解析

*/

JSONObject jsonDataAddressJDetails = new JSONObject(jsonAddressDetails);

/**

* 获得标签Country的JSON数据

*/

String jsonCountry = jsonDataAddressJDetails.getString("Country");

/**

* 对上面得到的JSON数据类型的字符串(jsonCountry)进行解析

*/

JSONObject jsonDataCountry = new JSONObject(jsonCountry);

/**

* 对解析出来的感兴趣的数据进行封装

*/

LewatekGPSAddress lewatekGPSAddress = new LewatekGPSAddress();

/**

* 设置CountryName

*/

lewatekGPSAddress.setCountryName(jsonDataCountry.getString("CountryName"));

/**

* 设置CountryNameCode

*/

lewatekGPSAddress.setCountryNameCode(jsonDataCountry.getString("CountryNameCode"));

/**

* 获得标签AdministrativeArea的JSON数据

*/

String jsonAdministrativeArea = jsonDataCountry.getString("AdministrativeArea");

/**

* 对上面得到的JSON数据类型的字符串(jsonAdministrativeArea)进行解析

*/

JSONObject jsonDataAdministrativeArea = new JSONObject(jsonAdministrativeArea);

/**

* 设置AdministrativeAreaName

*/

lewatekGPSAddress.setAdministrativeAreaName(jsonDataAdministrativeArea.getString("AdministrativeAreaName"));

/**

* 获得标签Locality的JSON数据

*/

String jsonLocality = jsonDataAdministrativeArea.getString("Locality");

/**

* 对上面得到的JSON数据类型的字符串(jsonLocality)进行解析

*/

JSONObject jsonDataLocality = new JSONObject(jsonLocality);

/**

* 设置LocalityName

*/

lewatekGPSAddress.setLocalityName(jsonDataLocality.getString("LocalityName"));

/**

* 获得标签DependentLocality的JSON数据

*/

String jsonDependentLocality = jsonDataLocality.getString("DependentLocality");

/**

* 对上面得到的JSON数据类型的字符串(jsonDependentLocality)进行解析

*/

JSONObject jsonDataDependentLocality = new JSONObject(jsonDependentLocality);

lewatekGPSAddress.setDependentLocalityName(jsonDataDependentLocality.getString("DependentLocalityName"));

Log.e(TAG,lewatekGPSAddress.toString());

return true;

}

} catch (JSONException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return false;

}

从google服务器上获得的json数据(提取对我有用的数据:CountryName、LocalityName、AdministrativeAreaName、DependentLocalityName,即中国上海市上海市浦东新区(中国湖南省衡阳市衡山县这样的数据也能提取)):

{

"name": "31.20322202833381,121.59876351250254",

"Status": {

"code": 200,

"request": "geocode"

},

"Placemark": [ {

"id": "p1",

"address": "中国上海市浦东新区祖冲之路994号-1088号",

"AddressDetails": {

"Accuracy" : 8,

"Country" : {

"AdministrativeArea" : {

"AdministrativeAreaName" : "上海市",

"Locality" : {

"DependentLocality" : {

"DependentLocalityName" : "浦东新区",

"Thoroughfare" : {

"ThoroughfareName" : "祖冲之路994号-1088号"

}

},

"LocalityName" : "上海市"

}

},

"CountryName" : "中国",

"CountryNameCode" : "CN"

}

},

"ExtendedData": {

"LatLonBox": {

"north": 31.2070152,

"south": 31.2007199,

"east": 121.6018752,

"west": 121.5955799

}

},

"Point": {

"coordinates": [ 121.5986103, 31.2038252, 0 ]

}

} ]

}

Value [{"id":"p1","ExtendedData":{"LatLonBox":{"south":31.2007199,"west":121.5955799,"east":121.6018752,"north":31.2070152}},"address":"中国上海市浦东新区祖冲之路994号-1088号","Point":{"coordinates":[121.5986103,31.2038252,0]},"AddressDetails":{"Country":{"CountryNameCode":"CN","CountryName":"中国","AdministrativeArea":{"Locality":{"LocalityName":"上海市","DependentLocality":{"DependentLocalityName":"浦东新区","Thoroughfare":{"ThoroughfareName":"祖冲之路994号-1088号"}}},"AdministrativeAreaName":"上海市"}},"Accuracy":8}}] at Placemark of type org.json.JSONArray cannot be converted to JSONObject

关于Android应用中如何解析获取的json数据就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

Android中怎获取json,Android应用中如何解析获取的json数据相关推荐

  1. php批量解析json,封装php类批量解析css成json格式_html/css_WEB-ITnose

    封装php类批量解析css成json格式 业务需求 我相信很多同学有过做一个自定义建站系统的想法,好比某空间的自定义拖拽组件,如果想要实现一个可视化建站系统,那CSS作为前端样式而言,是必须要存入到数 ...

  2. java dom获取命名空间属性_Java DOM XML解析::获取元素属性值

    如何从元素中提取属性值.我的xml节点是这样写的 &LT nodename attribute ="value">我需要将其解压缩以将其与另一个字符串进行比较. 但由 ...

  3. Esp8266 进阶之路28 【高级篇】教你轻松自如使用cJson在乐鑫 esp8266 如何解析一段json数据以及如何生成一段json数据。(附带demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  4. 在线Excel文件解析转换成JSON格式

    在线Excel文件解析转换成JSON格式 在线Excel文件解析转换成JSON格式 本工具可以将上传的Excel文件解析转换成JSON格式,支持下载 本工具可以将上传的Excel文件解析转换成JSON ...

  5. Android中的JSON解析方式:json; Gson ; Fastjson

    本文主要介绍Json数据的解析 ----a,json数据的介绍 ----b,json数据的解析 ----c,gson数据的解析,谷歌公司的一种格式 ----d,fastjson数据的解析,阿里巴巴的一 ...

  6. android json mysql_Android通过json向MySQL中读写数据的方法详解【写入篇】

    本文实例讲述了Android通过json向MySQL中写入数据的方法.,具体如下: 先说一下如何通过json将Android程序中的数据上传到MySQL中: 首先定义一个类JSONParser.Jav ...

  7. 【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 使用 DexClassLoader 获取组件类失败 | 失败原因分析 | 自定义类加载器没有加载组件类的权限 )

    文章目录 一.使用 DexClassLoader 获取组件类失败报错 二.失败原因分析 一.使用 DexClassLoader 获取组件类失败报错 在上一篇博客 [Android 逆向]启动 DEX ...

  8. 【Android 插件化】Hook 插件化框架 ( 通过反射获取 “宿主“ 应用中的 Element[] dexElements )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  9. 【Android 插件化】Hook 插件化框架 ( 通过反射获取 “插件包“ 中的 Element[] dexElements )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

最新文章

  1. android-Bitmap,View,Canvas大综合
  2. Run time setting设置详解
  3. 学web前端的第一天
  4. import java.util.calendar_Java.util.Calendar.setTimeInMillis()
  5. php无法新数据类型,新手入门PHP必知的七种数据类型
  6. bsgs(Baby Steps Giant Steps)算法
  7. Docker 原理、学习教程
  8. ArrayList源码浅析
  9. python 发送邮件connect none_使用python向IP地址发送邮件
  10. 数据结构上机实践第八周项目8-稀疏矩阵的三元组表示的实现及应用
  11. Merge the incoming changes into the current branch
  12. yii验证在一个数组内_PHP实现一个轻量级容器
  13. java学习血泪史目录
  14. 记录:ERROR YarnScheduler: Lost executor 2 on XXX: Container killed by YARN for exceeding memory limits
  15. 常用的正则符号(python)
  16. Python的大数据之旅(1)---Anaconda与WingIDE安装
  17. 如何将html转成PDF文件
  18. 苹果计算机如何出现关机界面,让你的iPhone开关机重启和电脑一样显示进度条
  19. 微信小程序05---WebSocket的使用
  20. 2.18 haas506 2.0开发教程 - 阿里云M2M设备间通信 - 规则引擎/Topic消息路由(仅支持2.2以上版本)

热门文章

  1. linux 2行数据为一条记录 该如何操作这一条记录_Linux 日志文件系统原来是这样工作的...
  2. mybatis 一对一 一对多 级联查询
  3. tomcat9-jenkins:insufficient free space available after evicting expired cache entries-consider
  4. 使用SharpZipLib.dll压缩zip
  5. 几种排序与最大K问题
  6. linux 修改文件访问权限
  7. 单片机人流统计装置的程序_单片机其实不难
  8. 把一个数组分为多个数组
  9. python中cursor操作数据库(转)
  10. 蠢货别忘(一)common lisp funcall