Android中怎获取json,Android应用中如何解析获取的json数据
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数据相关推荐
- php批量解析json,封装php类批量解析css成json格式_html/css_WEB-ITnose
封装php类批量解析css成json格式 业务需求 我相信很多同学有过做一个自定义建站系统的想法,好比某空间的自定义拖拽组件,如果想要实现一个可视化建站系统,那CSS作为前端样式而言,是必须要存入到数 ...
- java dom获取命名空间属性_Java DOM XML解析::获取元素属性值
如何从元素中提取属性值.我的xml节点是这样写的 < nodename attribute ="value">我需要将其解压缩以将其与另一个字符串进行比较. 但由 ...
- Esp8266 进阶之路28 【高级篇】教你轻松自如使用cJson在乐鑫 esp8266 如何解析一段json数据以及如何生成一段json数据。(附带demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...
- 在线Excel文件解析转换成JSON格式
在线Excel文件解析转换成JSON格式 在线Excel文件解析转换成JSON格式 本工具可以将上传的Excel文件解析转换成JSON格式,支持下载 本工具可以将上传的Excel文件解析转换成JSON ...
- Android中的JSON解析方式:json; Gson ; Fastjson
本文主要介绍Json数据的解析 ----a,json数据的介绍 ----b,json数据的解析 ----c,gson数据的解析,谷歌公司的一种格式 ----d,fastjson数据的解析,阿里巴巴的一 ...
- android json mysql_Android通过json向MySQL中读写数据的方法详解【写入篇】
本文实例讲述了Android通过json向MySQL中写入数据的方法.,具体如下: 先说一下如何通过json将Android程序中的数据上传到MySQL中: 首先定义一个类JSONParser.Jav ...
- 【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 使用 DexClassLoader 获取组件类失败 | 失败原因分析 | 自定义类加载器没有加载组件类的权限 )
文章目录 一.使用 DexClassLoader 获取组件类失败报错 二.失败原因分析 一.使用 DexClassLoader 获取组件类失败报错 在上一篇博客 [Android 逆向]启动 DEX ...
- 【Android 插件化】Hook 插件化框架 ( 通过反射获取 “宿主“ 应用中的 Element[] dexElements )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- 【Android 插件化】Hook 插件化框架 ( 通过反射获取 “插件包“ 中的 Element[] dexElements )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
最新文章
- android-Bitmap,View,Canvas大综合
- Run time setting设置详解
- 学web前端的第一天
- import java.util.calendar_Java.util.Calendar.setTimeInMillis()
- php无法新数据类型,新手入门PHP必知的七种数据类型
- bsgs(Baby Steps Giant Steps)算法
- Docker 原理、学习教程
- ArrayList源码浅析
- python 发送邮件connect none_使用python向IP地址发送邮件
- 数据结构上机实践第八周项目8-稀疏矩阵的三元组表示的实现及应用
- Merge the incoming changes into the current branch
- yii验证在一个数组内_PHP实现一个轻量级容器
- java学习血泪史目录
- 记录:ERROR YarnScheduler: Lost executor 2 on XXX: Container killed by YARN for exceeding memory limits
- 常用的正则符号(python)
- Python的大数据之旅(1)---Anaconda与WingIDE安装
- 如何将html转成PDF文件
- 苹果计算机如何出现关机界面,让你的iPhone开关机重启和电脑一样显示进度条
- 微信小程序05---WebSocket的使用
- 2.18 haas506 2.0开发教程 - 阿里云M2M设备间通信 - 规则引擎/Topic消息路由(仅支持2.2以上版本)
热门文章
- linux 2行数据为一条记录 该如何操作这一条记录_Linux 日志文件系统原来是这样工作的...
- mybatis 一对一 一对多 级联查询
- tomcat9-jenkins:insufficient free space available after evicting expired cache entries-consider
- 使用SharpZipLib.dll压缩zip
- 几种排序与最大K问题
- linux 修改文件访问权限
- 单片机人流统计装置的程序_单片机其实不难
- 把一个数组分为多个数组
- python中cursor操作数据库(转)
- 蠢货别忘(一)common lisp funcall