什么是JSON
JSON即JavaScript Object Natation, 它是一种轻量级的数据交换格式, 与XML一样, 是广泛被采用的客户端和服务端交互的解决方案.
JSON对象:
JSON中对象(Object)以”{“开始, 以”}”结束. 对象中的每一个item都是一个key-value对, 表现为”key:value”的形式, key-value对之间使用逗号分隔. 如:{“name”:”coolxing”, “age”=24, “male”:true, “address”:{“street”:”huiLongGuan”, “city”:”beijing”, “country”:”china”}}. JSON对象的key只能是string类型的, 而value可以是string, number, false, true, null, Object对象甚至是array数组, 也就是说可以存在嵌套的情况.
JSON数组:
JSON数组(array)以”[“开始, 以”]”结束, 数组中的每一个元素可以是string, number, false, true, null, Object对象甚至是array数组, 数组间的元素使用逗号分隔. 如[“coolxing”, 24, {“street”:”huiLongGuan”, “city”:”beijing”, “country”:”china”}].
JSONObject, JSONArray来构建json文本
try {
JSONObject person =
new JSONObject();
JSONArray phone =
new JSONArray();
phone.
put(
"12345678").
put(
"87654321");
person.
put(
"phone", phone);
person.
put(
"name",
"yuanzhifei89");
person.
put(
"age",
100);
JSONObject address =
new JSONObject();
address.
put(
"country",
"china");
address.
put(
"province",
"jiangsu");
person.
put(
"address", address);
person.
put(
"married",
false);
}
catch (JSONException ex) {
throw
new RuntimeException(ex);
}
getType和optType api的使用
getType可以将要获取的键的值转换为指定的类型,如果无法转换或没有值则抛出JSONException
optType也是将要获取的键的值转换为指定的类型,无法转换或没有值时返回用户提供或这默认提供的值
try {
phone.getLong(
0);
person.getLong(
"name");
phone.optLong(
0);
phone.optLong(
0,
1000);
person.optLong(
"name");
person.optLong(
"name",
1000);
}
catch (JSONException ex) {
}
使用JSONStringer来构建json文本
try {
JSONStringer jsonText = new JSONStringer()
// 首先是{,对象开始。object和endObject必须配对使用
jsonText
.object()
jsonText
.key(
"phone")
// 键phone的值是数组。array和endArray必须配对使用
jsonText
.array()
jsonText
.value(
"12345678")
.value(
"87654321")
jsonText
.endArray()
jsonText
.key(
"name")
jsonText
.value(
"yuanzhifei89")
jsonText
.key(
"age")
jsonText
.value(
100)
jsonText
.key(
"address")
// 键address的值是对象
jsonText
.object()
jsonText
.key(
"country")
jsonText
.value(
"china")
jsonText
.key(
"province")
jsonText
.value(
"jiangsu")
jsonText
.endObject()
jsonText
.key(
"married")
jsonText
.value(false)
// },对象结束
jsonText
.endObject()
} catch (JSONException ex) {
throw new RuntimeException(ex)
}
将json文本解析为对象
// {
// : [, ], // 数组
// : , // 字符串
// :
100, // 数值
// : { : , : }, // 对象
// :
false // 布尔值
// }
private static final
String JSON =
+
phone\
12345678\
87654321\ +
name\yuanzhifei89\ +
age\ +
address\country\china\province\jiangsu\ +
married\ +
;
try {
JSONTokener jsonParser = new
JSONTokener(
JSON);
// 此时还未读取任何json文本,直接读取就是一个
JSONObject对象。
// 如果此时的读取位置在 : 了,那么nextValue就是(
String)
JSONObject person = (
JSONObject) jsonParser.nextValue();
// 接下来的就是
JSON对象的操作了
person.getJSONArray();
person.getString();
person.getInt();
person.getJSONObject();
person.getBoolean();
} catch (
JSONException ex) {
// 异常处理代码
}
其它的api基本就是用来查看json文本中的文本的
try {
JSONTokener jsonParser =
new JSONTokener(
JSON);
jsonParser.next(
8);
jsonParser.next();
jsonParser.nextClean();
jsonParser.nextString(
'a');
jsonParser.nextTo(
"0089");
jsonParser.back();
jsonParser.next();
jsonParser.skipPast(
"address");
jsonParser.next(
8);
jsonParser.skipTo(
'm');
jsonParser.next(
8);
}
catch (JSONException ex) {
}
Gson的基本使用方法:
1.基础用法toJson
toJason()方法将对象转换成Json字符串
Gson gson
= new Gson();
List persons
= new ArrayList();
String str
= gson
.toJson(persons);
2.基础用法:fromJson()
Gson提供了fromJson()方法来实现从Json字符串转化为到java实体的方法。
比如json字符串为:[{“name”:”name0”,”age”:0}]
Person person = gson
.fromJson(str, Person
.class)
提供两个参数,分别是json字符串以及需要转换对象的类型。 如果需要解析的是一段JSON 数组会稍微麻烦一点,需要借助TypeToken 将期望解 析成的数据类型传入到fromJson()方法中,如下所示:
List<Person> people = gson.fromJson(jsonData, new TypeToken<
List<Person>>()
{}.getType());
3.避免Unicode转义
例如:
{
"s":
"\u003c"}
我只想简单的打印成这样
{
"s":
"<"}
解决方案:
我只需要 disable HTML escaping.
Gson gson = new GsonBuilder()
.disableHtmlEscaping()
.create()
4.排除某些字段
如果一个类
A中含有字段
field1,它的父类也含有字段
field1,那么
A对象
toJson的时候,就会发生
declares multiple JSON fields named field1。
解决方案1:在类
A中去掉字段
filed1.
解决方案2:使用
Json的
@Expose注解
将A类MessageText中需要打印的字段filed1加上注解@Expose 。那么父类中没有加注解的field1就会被排除掉。
Gson g = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
5.换属性名字
public class SomeClassWithFields {
@SerializedName(
"name")
private final String someField;
private final String someOtherField;
public SomeClassWithFields(String a, String b) {
this.someField = a;
this.someOtherField = b;
}
}
SomeClassWithFields objectToSerialize =
new SomeClassWithFields(
"a",
"b");
Gson gson =
new Gson();
String jsonRepresentation = gson.toJson(objectToSerialize);
System.out.println(jsonRepresentation);
===== OUTPUT =====
{
"name":
"a",
"someOtherField":
"b"}
6.泛型的用法
HashMap<
String, Book> booksMap = gson.fromJson(result,
new TypeToken<HashMap>
String, Book>() { }.getType());
转载请注明原文地址: https://ju.6miu.com/read-964305.html