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数据就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hibernate4之session核心方法

在学习session的核心方法之前,我们先了解下hibernate中几种对象的状态: 暂时状态:这样的状态就好像咱们公司请的暂时员工一样,他在公司里没有相关的资料和id。 特点:在使用代理主键的情况下, OID 通常为 null 不…

Android 同步锁死锁,Android多线程研究(3)——线程同步和互斥及死锁

为什么会有线程同步的概念呢?为什么要同步?什么是线程同步?先看一段代码:package com.maso.test;public class ThreadTest2 implements Runnable{private TestObj testObj new TestObj();public static void main(String[] args)…

QML与C++交互:登陆界面设计

QML与C交互:登陆界面设计 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:Qt5.2.1 说明: QML设计前台界面,C后台负责逻辑 效果图: 源码: 前台qml文件 login.qml /******************************************************…

html怎么在字体中加波浪线,CSS3实现文字波浪线效果

前言css的设计之巧妙,实现之精妙,细细寻味,其妙非凡,妙不可言。这波浪线,取巧的运用了linear-gradient属性,合角度、颜色、位置于一体,配合background-size,background-repeat&#…

NET Core 指令启动

ASP.NET Core 是新一代的 ASP.NET,早期称为 ASP.NET vNext,并且在推出初期命名为ASP.NET 5,但随着 .NET Core 的成熟,以及 ASP.NET 5的命名会使得外界将它视为 ASP.NET 的升级版,但它其实是新一代从头开始打造的 ASP.N…

html文本显示状态代码中,HTML文本显示状态代码中,表示?

文本如何大小判别偏心受压剪力墙的。能源能量然资提供的自是指源,显示如(,显示能、能、能、能、、热等的械能是机生物原子光能化学总称,不可能源然界的一可再生能于自源可源和再生分为存在次能。状态中表并发儿麻体温生的婴幼易发间低醉期症(…

1807. [NOIP2014]寻找道路P2296 寻找道路

题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通。 2 .在满足…

html页面 wordpress,WordPress纯代码实现前端页面HTML完美压缩

前言:压缩HTML页面的好处就是略微提升页面加载速度,并给那些爱扒皮的缺德玩意制造些许麻烦。好了将如下代码添加在functions.php中即可://压缩WordPress前端html代码function wp_compress_html(){function wp_compress_html_main ($buffer){$…

js中的作用域

关于变量和参数问题: 函数外面定义的变量是全局变量,函数内可以直接使用。 在函数内部没有使用var定义的变量则为全局变量,在函数内使用var关键字定义的变量是局部变量,即出了函数外边无法获取。 js函数定义的参数没有默认值&…

html HTML1300 进行了导航,jquery根据文章H标签自动生成导航目录

jquery根据文章H标签自动生成导航目录2017-11-19 20:57在一些旅游网站,比如说途牛、携程这些,当你看某条线路的详情页时,右边会有相应的第一天、第二天等的目录。这么大的网站,不可能后台添加行程的时候,每一天都要自动…

asp.net core利用DI实现自定义用户系统,脱离ControllerBase.User

前言 很多时候其实我们并不需要asp.net core自带的那么复杂的用户系统,基于角色,各种概念,还得用EF Core,而且在web应用中都是把信息存储到cookie中进行通讯(我不喜欢放cookie中,因为有次我在mac系统中的sa…

html的排版标题的是,HTML 5结构排版布局

进行总体布局时候,具体可以用的方法。1.大纲:文档中各内容区块的结构编排。内容区块可以使用标题元素来展示各级内容区块的标题。关于内容区块的编排可以分为“显示编排”和“隐式编排”。显示编排:明确使用section等元素创建文档结构&#x…

[LeetCode]Distinct Subsequences,解题报告

题目 Given a string S and a string T, count the number of distinct subsequences of T in S.A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative po…

2021年河南高考成绩排名查询一分一段表,2018河南高考一分一段统计表,查排名必备!...

原标题:2018河南高考一分一段统计表,查排名必备!:点击这里信息省招办公布了2018年普通高招分数段统计表,对每个分数段有多少考生进行了详细统计。你考了多少分?处在哪个位置?快来看看&#xff0…

实用的css样式

当字数超过一行时,可以用...代替 white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 这三个样式同时使用才有效,也可以去掉white-space样式,分两行 转载于:https://www.cnblogs.com/maggie-php/p/6906462.html

js滚轮换切屏

js滚轮换切屏 因为全项目不是自己写的,仅仅是帮别人写js滚轮代码,并且别人项目也还未上线。所以仅仅贴出自己写的那段部分代码, 效果:鼠标滚轮滚动时。网頁屏幕一屏一屏的上下切换 (下面代码在本地电脑的IE,chrome与FireFox这三个…

(2021|CoRR,AugCLIP,优化)FuseDream:通过改进的 CLIP+GAN 空间优化实现免训练文本到图像生成

FuseDream: Training-Free Text-to-Image Generation with Improved CLIPGAN Space Optimization 公众:EDPJ(添加 VX:CV_EDPJ 或直接进 Q 交流群:922230617 获取资料) 目录 0. 摘要 1. 简介 2. CLIPGAN 文本到图…

中文邮件营销html模版,怎么制作邮件营销模板?— —邮件格式

怎么制作邮件营销模板?— —邮件格式U-Mail邮件营销平台发表时间 2017-09-21人气 757次做EDM邮件营销,需要有好的邮件群发工具,还要有好的内容,那么如何制作好邮件营销的模板呢?现在U-Mail邮件群发平台根据已有的一些经…

查询数据库中所有表名

查询数据库中所有表名select table_name from information_schema.tables where table_schemacsdb and table_typebase table; 查询指定数据库中指定表的所有字段名column_nameselect column_name from information_schema.columns where table_schemacsdb and table_nameusers…

【默认加入持久化机制,防止消息丢失,v0.0.3】对RabbitMQ.Client进行一下小小的包装,绝对实用方便...

RabbitMQ是一个老牌的非微软的消息队列组件,一般来说应该能满足中小型公司对消息队列生产的需求,平时我们在.NET开发环境下运用它是可能会需要RabbitMQ.Client的SDK库,此库是官网提供,目前最新发布版本是v4.1.3。在我们对接项目时…