首页 技术 正文
技术 2022年11月8日
0 收藏 516 点赞 2,074 浏览 9067 个字

三种类生成JSON数据方法

JSON(原生):

第一种

JSONStringer和JSONObject区别在于添加对象时是按顺序添加的比如说 JSONStringer 添加 a:1 b:2 c:3那么生成的也是{a:1,b:2,c:3},而JSONObject不保证有可能为{c:3,a:1,b:2}

package com.fmy.bit.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;import android.test.AndroidTestCase;public class TestDemo extends AndroidTestCase{
/**
* 原声JSONObject类生成JSON的数据的方法一
*/
public void test(){JSONObject root = new JSONObject();
try {
//放入obj方法1: 键:name 值:小
root.put("name", "小");
//放入obj方法2:放入 obj 中一个对象 键:name 值:小
JSONObject obj = new JSONObject();
obj.put("name1", "大");
obj.put("name2", "大");
root.put("obj", obj);
JSONArray array = new JSONArray();
//添加到数组的那个位置 如果前面没有那么直接为null填充前方的值
array.put(3, "33");
array.put(4, "33");
array.put("33");
root.put("array", array);} catch (JSONException e) {
e.printStackTrace();
}
}
}

输出的JSON:

{"name":"小","obj":{"name1":"大","name2":"大"},"array":[null,null,null,"33","33","33"]}


GSON(谷歌)

支持直接json解析成javabeen 也支持javabeen解析成json 底层运用反射机制打破封装性,即你对象哪怕是私有的不设置set方法依然赋值。阿里巴巴必须设置Get和set方法且方法名必须符合规范

代码如下:

package com.fmy.bit.test;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONStringer;import com.google.gson.Gson;import android.test.AndroidTestCase;class A{
List<String> list;
String name ;
int age;
}
public class TestDemo extends AndroidTestCase{public void test(){A a = new A();
a.list = new ArrayList<String>();
a.list.add("我是数组1");
a.list.add("我是数组2");
a.list.add("我是数组3");
a.name = "name";
a.age =15;try {Gson gson = new Gson();
String json = gson.toJson(a);
System.out.println(json);
System.out.println(json);
System.out.println(json);
} catch (Exception e) {
e.printStackTrace();
}
}
}

输出 {"age":15,"list":["我是数组1","我是数组2","我是数组3"],"name":"name"} 体现GSON反射机制代码:

package com.fmy.test;import java.util.ArrayList;
import java.util.List;
import java.util.Map;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.google.gson.Gson;class A {
private String name;
private int age;public int getAge() {
return age;
}public A(String name, int age) {
super();
this.name = name;
this.age = age;
}@Override
public String toString() {
return "A [name=" + name + ", age=" + age + "]";
}}public class Test {public static void main(String[] args) {
Gson gson = new Gson();
String name = "{'':'张三','age':18}";
A a = new A("张三",18);
String json1 = gson.toJson(a);//阿里巴巴的json必须设置get方法不然无数据 这里给age设置 name 不设置get
String json2 = JSON.toJSONString(a);System.out.println("json1"+json1);
System.out.println("json2"+json2);
}
}

输出: json1{"name":"张三","age":18} json2{"age":18}

生成一个json数组代码

注意反射 不经过set get方法

package com.fmy.test;import java.util.ArrayList;
import java.util.List;import com.google.gson.Gson;class A{
String name ;
int age;
public A(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
public class Test {
private static List<A> list;public static void main(String[] args) {
Gson gson = new Gson();
list = new ArrayList<A>();
list.add(new A("S", 18));
list.add(new A("S", 18));
String json = gson.toJson(list);
System.out.println(json);
}
}

输出

[{"name":"S","age":18},{"name":"S","age":18}]

fastjson 阿里巴巴

支持javabeen直接生成json 也可以json生成javabean,需要写对get和set方法

package com.fmy.bit.test;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONStringer;import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;import android.test.AndroidTestCase;class A{
List<String> list;
String name ;
int age;
}
public class TestDemo extends AndroidTestCase{public void test(){A a = new A();
a.list = new ArrayList<String>();
a.list.add("我是数组1");
a.list.add("我是数组2");
a.list.add("我是数组3");
a.name = "name";
a.age =15;
try {
String json = JSON.toJSONString(a);
System.out.println(json);
System.out.println(json);
System.out.println(json);
} catch (Exception e) {
e.printStackTrace();
}
}
}

输出一个json数组:





三种类解析JSON

JSON(原生):

第一种

代码:

package com.fmy.bit.test;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONStringer;import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;import android.test.AndroidTestCase;class A{
List<String> list;
String name ;
int age;
}
public class TestDemo extends AndroidTestCase{public void test() throws JSONException{
String json ="{'a':1,'b':'nihao',\"ds\":[\"s\",{'a':2}]}";
JSONObject root = new JSONObject(json);
int a = root.getInt("a");
String b = root.getString("b");
JSONArray array = root.getJSONArray("ds");
String s = array.getString(0);
JSONObject obj = array.getJSONObject(1);
String aa = obj.getString("a");System.out.println("a:"+a+" b:"+b+" array"+array+" s:"+s+" aa:"+aa);
System.out.println("a:"+a+" b:"+b+" array"+array+" s:"+s+" aa:"+aa);
System.out.println("a:"+a+" b:"+b+" array"+array+" s:"+s+" aa:"+aa);
}
}

输出结果

a:1 b:nihao array["s",{"a":2}] s: s aa:2

GSON(谷歌)

代码:

package com.fmy.bit.test;import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;import org.json.JSONException;import android.test.AndroidTestCase;import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;class A{
List<String> list;
String name ;
int age;
@Override
public String toString() {
return "A [list=" + list + ", name=" + name + ", age=" + age + "]";
}
}public class TestDemo extends AndroidTestCase{public void test() throws JSONException{
String json ="{'age':1,'name':'张三',\"list\":[\"s\"]}";
String json2 ="['张三','李四','王万']";
String json3 ="[{'张三':1,'李四':2},{'李四':2},{'王万':3}]";
List<String>list;
Gson gson = new Gson();
//生成javabean
A a = gson.fromJson(json,A.class);
//解析成List
list= gson.fromJson(json2, new TypeToken<List<String>>(){}.getType() );//List中包含对象
List<Map<String,String>> list2=gson.fromJson(json3, new TypeToken<List<Map<String,String>>>(){}.getType());System.out.println(a);
System.out.println(list);
System.out.println(list2);
}
}

输出:

A [list=[s], name=张三, age=1] [张三, 李四, 王万] [{张三=1, 李四=2}, {李四=2}, {王万=3}]


fastjson(阿里巴巴)

解析时必须设置set方法 生成时json时必须有get方法

代码:

package com.fmy.test;import java.util.ArrayList;
import java.util.List;
import java.util.Map;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.google.gson.Gson;class A {
private String name;
private int age;public void setAge(int age) {
this.age = age;
}@Override
public String toString() {
return "A [name=" + name + ", age=" + age + "]";
}}public class Test {public static void main(String[] args) {
Gson gson = new Gson();
String name = "{'name':'张三','age':18}";// 必须设置set方法 如果一个都不匹配报错
//匹配一个以上不报错 ,但是无法生成 没有设置set的数据
A a = JSON.parseObject(name, A.class);// System.out.println("json1"+json1);
System.out.println(a);
}
}

输出 A [name=null, age=18]

上面的正确写法

package com.fmy.test;import java.util.ArrayList;
import java.util.List;
import java.util.Map;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.google.gson.Gson;class A {
private String name;
private int age;public void setAge(int age) {
this.age = age;
}public void setName(String name) {
this.name = name;
}@Override
public String toString() {
return "A [name=" + name + ", age=" + age + "]";
}}public class Test {public static void main(String[] args) {
Gson gson = new Gson();
String name = "{'name':'张三','age':18}";// 必须设置set方法 如果一个都不匹配报错
//匹配一个以上不报错 ,但是无法生成 没有设置set的数据
A a = JSON.parseObject(name, A.class);// System.out.println("json1"+json1);
System.out.println(a);
}
}

输出

A [name=张三, age=18]


生成一个解析数组json的方法生成list:

package com.fmy.test;import java.util.ArrayList;
import java.util.List;
import java.util.Map;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.google.gson.Gson;public class Test {public static void main(String[] args) {List<String> list = new ArrayList<String>();String string = "['a','b']";
list = JSON.parseArray(string,String.class);// System.out.println("json1"+json1);
System.out.println(list);
}
}

输出 [a, b] 如果含有对象

package com.fmy.test;import java.util.ArrayList;
import java.util.List;
import java.util.Map;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.google.gson.Gson;class A {
private String name;
private int age;public void setAge(int age) {
this.age = age;
}public void setName(String name) {
this.name = name;
}@Override
public String toString() {
return "A [name=" + name + ", age=" + age + "]";
}}public class Test {public static void main(String[] args) {List<String> list = new ArrayList<String>();String string = "[{'name':'章撒','age':15},{'name':'章撒2','age':215}]";
//List<A> parseObject = JSON.parseObject(string,new TypeReference<List<A>> (){});
List<A> parseObject = JSON.parseArray(string, A.class);// System.out.println("json1"+json1);
System.out.println(parseObject);
}
}

输出>

[A [name=章撒, age=15], A [name=章撒2, age=215]]

如果解析json数组中想让list放入Map对象 如List<Map<String,object>> 使用代码

package com.fmy.test;import java.util.ArrayList;
import java.util.List;
import java.util.Map;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.google.gson.Gson;class A {
private String name;
private int age;public void setAge(int age) {
this.age = age;
}public void setName(String name) {
this.name = name;
}@Override
public String toString() {
return "A [name=" + name + ", age=" + age + "]";
}}public class Test {public static void main(String[] args) {List<String> list = new ArrayList<String>();String string = "[{'name':'章撒','age':15},{'name':'章撒2','age':215}]";
List<Map<String,Object>> parseObject = JSON.parseObject(string,new TypeReference<List<Map<String,Object>>> (){});
//
System.out.println(parseObject);
}
}

输出

[{name=章撒, age=15}, {name=章撒2, age=215}]

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,489
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,904
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,737
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,490
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,128
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,291