安卓开发----Json解析
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
json在我们学习中是不可避免都会遇到的, json使用起来特别方便, 但是对于json的解析会遇到一些问题.
今天的文章直说如何做到解析json数组
一. 解析最简单的Json数组
{"accessToken":"1ed77dd84930e1c99e8feb67fd3b61c",
"tokenType":"bearer",
"refreshToken":"91e4401e8a49d1a88b8b26ee73263b11",
"expiresIn":3600,
"scope":"default"}
这里面很简单的就是字段对应字段的值, 那怎么取出对应的值呢?
private void parseJSONWithJSONObject(String JsonData) {
try
{
JSONArray jsonArray = new JSONArray(JsonData);
for (int i=0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String accessToken = jsonObject.getString("accessToken");
String tokenType = jsonObject.getString("tokenType");
String refreshToken = jsonObject.getString("refreshToken");
String expiresIn = jsonObject.getString("expiresIn");
String scope = jsonObject.getString("scope");
String jsresult="\n"+"解析结果:"+"\naccessToken: " + accessToken + ";\ntokenType: " + tokenType + ";\nrefreshToken: " + refreshToken+";\nexpiresIn: "+expiresIn+";\nscope: "+scope;
System.out.println("accessToken" + accessToken + ";tokenType" + tokenType + ";refreshToken" + refreshToken+";expiresIn"+expiresIn+"scope"+scope);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
这样, 我们就把json字符串转换成了字符串数组, 我们想获取json数组里的某个字段的值时就可以像使用数组那样轻而易举.
代码也很简单, 先把Json字符串通过JSONArray类, 进行json序列化. 然后使用JSONObject类直接获取到json数组的内容
二. 嵌套的json解析
这上面相当于一维的json数组解析想必大家理解起来也不难, 但是我们平时还会遇到很多的复杂json数组 (其实并不复杂, 就是多维json数组而已).
* {
* "deviceId":"35c78968-7449-4dc4-adcd-8154479721b2",
* "gatewayId":"35c78968-7449-4dc4-adcd-8154479721b2",
* "nodeType":"GATEWAY",
* "createTime":"20180803T234419Z",
* "lastModifiedTime":"20180818T024013Z",
* "deviceInfo":{"nodeId":"869405030397288","name":"master02","description":null,"manufacturerId":"master01","manufacturerName":"master01","mac":null,"location":"Shenzhen","deviceType":"WaterMeter","model":"master01","swVersion":null,"fwVersion":null,"hwVersion":null,"protocolType":"CoAP","bridgeId":null,"status":"ONLINE","statusDetail":"NONE","mute":"FALSE","supportedSecurity":null,"isSecurity":null,"signalStrength":null,"sigVersion":null,"serialNumber":null,"batteryLevel":null},
* "services":[
* {
* "serviceId":"Trash","serviceType":"Trash",
* "data":{"Full_warning":17,"Help_msg":0,"Decibels":0,"Worker_msg":0,"Temp":0},
* "eventTime":"20180818T024013Z",
* "serviceInfo":null
* }
* ],
* "connectionInfo":{"protocolType":null},
* "location":null,
* "devGroupIds":[]
* }
既然说是多维的数组, 那岂不是也是很简单, 数组嵌套数据, 那我们多层解析也不久好了嘛, 所以上面的这个json字符串我的解析方法如下:
/**
* 解析Json数组
* @param JsonData
*/
private void parseJSONWithJSONObject(String JsonData) {
try
{
String services=null;
String data=null;
JSONArray jsonArray = new JSONArray(JsonData);
for (int i=0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
services = jsonObject.getString("services");
String eventTime = jsonObject.getString("eventTime"); //时间戳
}
JSONArray jsonArray2 = new JSONArray(services);
for (int i=0; i < jsonArray2.length(); i++) {
JSONObject jsonObject = jsonArray2.getJSONObject(i);
data = jsonObject.getString("data");
}
JSONArray jsonArray3 = new JSONArray("["+data+"]");
for (int i=0; i < jsonArray3.length(); i++) {
JSONObject jsonObject = jsonArray3.getJSONObject(i);
String Full_warning = jsonObject.getString("Full_warning");
String Help_msg = jsonObject.getString("Help_msg");
String Decibels = jsonObject.getString("Decibels");
String Worker_msg = jsonObject.getString("Worker_msg");
String Temp = jsonObject.getString("Temp");
Log.d("111",Full_warning+Decibels+Help_msg+Worker_msg+Temp);
}
Log.d("111",data); // {"Full_warning":17,"Help_msg":0,"Decibels":0,"Worker_msg":0,"Temp":0}
}
catch (Exception e)
{
e.printStackTrace();
}
}
这样看下来是不是也就是那么回事.
学习中, 有误请指正
GitHub 加速计划 / js / json
18
5
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:3 个月前 )
2134cb94
* change NLOHMANN_JSON_FROM_WITH_DEFAULT to let NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT work with an empty JSON instance
* fix ci_static_analysis_clang (ci_clang_tidy)
* change NLOHMANN_JSON_FROM_WITH_DEFAULT to let NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT work with an empty JSON instance 12 天前
6057b31d
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* Use ubuntu-latest image to run Valgrind (#4575)
* :wrench: use Clang image to run valgrind
* :wrench: use Clang image to run valgrind
* :wrench: use Clang image to run valgrind
* :wrench: use Ubuntu image to run valgrind
* Use Clang image to run iwyu (#4574)
* :wrench: use Clang image to run iwyu
* :wrench: use Clang image to run iwyu
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :wrench: overwork astyle call
* :art: format code
* :hammer: clean up 14 天前
更多推荐
已为社区贡献7条内容
所有评论(0)