json数据的解析相对而言,还是比较容易的,实现的代码也十分简单。这里用的是jsonReade方法来进行json数据解析。
1.在解析之前,大家需要知道什么是json数据。
json数据存储的对象是无序的“名称/值”对的集合。和其他的数据存储方式相比,json数据的可读性,可扩展性,编码难度,解码难度都有一定的优势。在json数据中,
对于一个对象:
(1)一个对象以“{”(左括号)开始,“}”(右括号)结束。
(2)每个“名称”后跟一个“:”(冒号);
(3)“‘名称/值’ 对”之间使用“,”(逗号)分隔。
对于一个数组:
(1)一个数组以“[”(左中括号)开始,“]”(右中括号)结束。
(2)值之间使用“,”(逗号)分隔。
下面是android官方给出的一组json数据示例:
[
{
"id": 912345678901,
"text": "How do I read JSON on Android?",
"geo": null,
"user": {
"name": "android_newb",
"followers_count": 41
}
},
{
"id": 912345678902,
"text": "@android_newb just use android.util.JsonReader!",
"geo": [50.454722, -104.606667],
"user": {
"name": "jesse",
"followers_count": 2
}
}
]
在代码中,如果直接定义json数据,需要在代码中对 “ 使用 \ 转义。上面json在代码中的形式为:(在java代码中,创建一段json数据,“ 符号需要转义)
private String jsonDate = "["
+ "{\"id\": 912345678901,"
+ "\"text\":\"How do I read JSON on Android?\","
+ "\"geo\":null,"
+ "\"user\":{\"name\":\"android_newb\",\"followers_count\":41}},"
+ "{\"id\": 912345678902,"
+ "\"text\":\"@android_newb just use android.util.JsonReader!\","
+ "\"geo\":[50.454722,-104.606667],"
+ "\"user\":{\"name\":\"jesse\",\"followers_count\":2}}"
+ "]";
1. 使用JsonReader方法解析Json数据对象,你需要创建一个JsonReader对象.
2.然后使用beginArray()来开始解析 [ 左边的第一个数组。
3.再使用beginObject()来开始解析数组{中的第一个对象。
4.对于直接的数据可以直接得到解析到的数据,但对于在json中嵌套了数组的数据,需要在写一个解析方法。
5.在解析完成后,别忘用endArray(),endObject()来关闭解析。
package com.mecury.jsontest;
import java.io.IOException;
import java.io.StringReader;
import android.util.JsonReader;
import android.util.JsonToken;
public class JsonUtils {
public void parseJson(String jsonDate) throws IOException{
//创建JsonReader对象
JsonReader jsReader = new JsonReader(new StringReader(jsonDate));
jsReader.beginArray();
while (jsReader.hasNext()) {
readMessage(jsReader);
}
jsReader.endArray();
}
public void readMessage(JsonReader jsReader) throws IOException{
jsReader.beginObject();
while(jsReader.hasNext()){
String tagName = jsReader.nextName();
if (tagName.equals("id")) {
System.out.println("name:"+jsReader.nextLong());
}else if (tagName.equals("text")) {
System.out.println("text:"+jsReader.nextString());
}else if (tagName.equals("geo") && jsReader.peek()!=JsonToken.NULL) {
readDoubleArray(jsReader);
}else if (tagName.equals("user")) {
readUser(jsReader);
}else {
//跳过当前值
jsReader.skipValue();
System.out.println("skip======>");
}
}
jsReader.endObject();
}
//解析geo中的数据
public void readDoubleArray(JsonReader jsReader) throws IOException{
jsReader.beginArray();
while(jsReader.hasNext()){
System.out.println(jsReader.nextDouble());
}
jsReader.endArray();
}
//由于读取user中的数据
public void readUser(JsonReader jsReader) throws IOException{
String userName = null;
int followsCount = -1;
jsReader.beginObject();
while (jsReader.hasNext()) {
String tagName = jsReader.nextName();
if (tagName.equals("name")) {
userName = jsReader.nextString();
System.out.println("user_name:"+ userName);
}else if (tagName.equals("followers_count")) {
followsCount = jsReader.nextInt();
System.out.println("followers_count:"+followsCount);
}
}
jsReader.endObject();
}
}
对上面的内容解析的输出:
11-22 06:59:52.441: I/System.out(5329): name:912345678901
11-22 06:59:52.441: I/System.out(5329): text:How do I read JSON on Android?
11-22 06:59:52.461: I/System.out(5329): skip======>
11-22 06:59:52.461: I/System.out(5329): user_name:android_newb
11-22 06:59:52.471: I/System.out(5329): followers_count:41
11-22 06:59:52.481: I/System.out(5329): name:912345678902
11-22 06:59:52.491: I/System.out(5329): text:@android_newb just use android.util.JsonReader!
11-22 06:59:52.500: I/System.out(5329): 50.454722
11-22 06:59:52.500: I/System.out(5329): -104.606667
11-22 06:59:52.510: I/System.out(5329): user_name:jesse
11-22 06:59:52.510: I/System.out(5329): followers_count:2
以上!另外对APP进行在线全方位的安全性、兼容性测试,我都会用这个:
http://www.ineice.com。
分享到:
相关推荐
仅保留了读取和解析json数据的相关类和方法(JsonReader,JsonSerializer),去除了写入json数据以及json和xml互相转换的部分以及其他不常用的类。 编译后dll仅20kb 也可以直接将类添加到项目中使用,非常方便 再次声明...
buildJSONPacketBody数组形式封装json、JsonReader解析服务器返回值、封装对象、https协议 http://blog.csdn.net/u013210620/article/details/51921598
使用google-gson的jsonReader来解析json数据
Json解析工具:Gson解析json有三个特点: JSON数据解析工具: JSONView JsonReader reader = new JsonReader(); org.json和json-lib比较简单,两者使用上差不多。使用这两个工具解析
极简的 Json Reader For .Net with C# 如,不想多附加一个 dll 可以将源码添加到项目里即可。
Unity使用jsonreader读取json数据,里面还附送Litjson文件和Jsonobject下载方式
跟XML类似,JsonReader也可以解析文件中的JSon数据,下面的例子是从帮忙文档中取下来的
Quickly read and write JSON using the JsonReader and JsonWriter or serialize your .NET objects with a single method call using the JsonSerializer. Json.NET's features include: - Lightning fast ...
json是移动平台上非常常用的数据传输格式,本示例提供了两种Json格式文件生成与解析的方式。 第一种通过JsonReader和JsonWriter两个对象进行json文件的读写操作,需要sdk在11以上。 第二种通过JSONArray、JSONObject...
这是一个流媒体拉式解析器-类似于但用于JSON。 要求 PHP 7.3或更高版本,带有Ctype和Intl扩展。 安装 要使用composer安装: composer require pcrov/jsonreader 用法 JsonReader的界面和行为与非常相似。 如果您...
本支持库实现了对JSON格式数据的解析支持。 操作系统支持: Windows
JSONCPP还提供了一个JsonReader类,可以将JSON文本解析为JsonValue对象。它还提供了一个JsonWriter类,可以将JsonValue对象写入JSON格式的文本。此外,JSONCPP还可以进行JSON的嵌套、合并和遍历等操作,具有很好的...
一个简单但是很有效的json获取的java代码,通过url获取json, 例如百度地图api的json获取
这里有一点要注意,虽然Unity中使用.Net Framework 3.5作为工程的类库输出,但是不能使用Net35下面的DLL,而应该使用Net20下面的DL
从文件或流中读取和写入JSON数据。 通过JsonSchema进行验证(有关规范,请参见http://json-schema.org)
该模块提供了一个简单的框架,用于使用应用程序解析 JSON。 由于 JSON 和 shell 脚本不容易混合,因此我们使用带有回调的基于事件的解析器。 在任何 POSIX shell 中- 不仅仅是 bash! 这允许处理任意复杂性的 JSON,...
JSON阅读器
JsonReader :解析JSON并构建JsonValue对象的DOM。 JsonValue :描述JSON对象,数组,字符串,float,long,boolean或null。 Json :使用JsonReader和JsonWriter读写任意对象图。 编写对象图 Json类使用反射将...
这是一个流读取器,用于逐个字符处理 JSON 数据并在解析完整块后执行回调。 数据流必须采用 JSON 数组的形式。 IE。 [1, 2, [3, 4], {"five": "six"}, ... 例子 要了解它,请在终端中运行以下命令: $ cat | ...
NET 5.0+)或NuGet包(除.NET Framework 4.5.2以外的所有其他平台)上都可以使用System.Text.Json平台上,它可以作为System.Text.Json.Utf8JsonReader和System.Text.Json.Utf8Jsonwriter包装器,为常见的JSON解析和...