相比于xml,json的主要特点是数据小,解析速度快,但是描述性差。

java中常见的json解析方法有Gson、Jackson、JSON.simple。

从解析速度上来看,Gson适合解析小数据量,Jackson适合解析大数据量的,JSON.simple解析大数据量和小数据量速率都很快。

先展示一下接下来要生成和解析的json数据:

{
"users": [
{
"phone": "138****",
"pwd": "123456",
"username": "zhangsan"
},
{
"phone": "158****",
"pwd": "abc",
"username": "lisi"
}
]
}

一、org.json

这个是android自带的解析方法。

生成:

    public static String createJson() {
JSONObject json = new JSONObject();
JSONArray jsonUsers = new JSONArray();
json.put("users", jsonUsers);
JSONObject jsonUser1 = new JSONObject();
JSONObject jsonUser2 = new JSONObject();
jsonUsers.put(jsonUser1);
jsonUsers.put(jsonUser2); jsonUser1.put("username", "zhangsan");
jsonUser1.put("pwd", "123456");
jsonUser1.put("phone", "138****"); jsonUser2.put("username", "lisi");
jsonUser2.put("pwd", "abc");
jsonUser2.put("phone", "158****");
return json.toString(); }

解析:

    public static void parseJson(String jsonStr){
JSONObject json =new JSONObject(jsonStr);
JSONArray jsonUsers=json.getJSONArray("users");
System.out.println(jsonUsers.length());
for (int i = 0; i < jsonUsers.length(); i++) {
JSONObject jsonUser=(JSONObject) jsonUsers.get(i);
System.out.print("user"+i+"[");
System.out.print("username:"+jsonUser.get("username"));
System.out.print(", pwd:"+jsonUser.get("pwd"));
System.out.println(", phone:"+jsonUser.get("phone")+"]");
}
}

二、Gson

解析:

首先得创建相应的类:

public class User {
private String phone;
private String pwd;
private String username;
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "User [phone=" + phone + ", pwd=" + pwd + ", username=" + username + "]";
} }

  

public class Users {
private List<User> users; public List<User> getUsers() {
return users;
} public void setUsers(List<User> users) {
this.users = users;
} @Override
public String toString() {
return "Users [users=" + users + "]";
} }

解析方法:

    public static void parseJson(String jsonStr) {
Gson gson=new Gson();
Users users=gson.fromJson(jsonStr, Users.class);
System.out.println(users); }

如何json数据整体就是一个数组,如下:

[
{
"phone": "138****",
"pwd": "123456",
"username": "zhangsan"
},
{
"phone": "158****",
"pwd": "abc",
"username": "lisi"
}
]

解析方法:

    public static void parseJson(String jsonStr) {
Gson gson=new Gson();
List<User> users;
users=gson.fromJson(jsonStr, new TypeToken<List<User>>(){}.getType());
System.out.println(users); }

生成:

    public static <T> String createJson(T t){
Gson gson=new Gson();
String rt=gson.toJson(t);
return rt; }

三、JSON.simple

    public static void parseJson(String filename) {
try {
JSONParser parser = new JSONParser();
Object obj = parser.parse(new FileReader(filename));
JSONObject jsonObject = (JSONObject) obj; JSONArray jsonUsers = (JSONArray) jsonObject.get("users"); Iterator<JSONObject> iterator = jsonUsers.iterator();
while (iterator.hasNext()) {
JSONObject jsonUser = iterator.next();
System.out.print("user[");
System.out.print("username:" + jsonUser.get("username"));
System.out.print(", pwd:" + jsonUser.get("pwd"));
System.out.println(", phone:" + jsonUser.get("phone") + "]");
}
} catch (IOException | ParseException e) {
e.printStackTrace();
} } public static void createJson() {
JSONObject json = new JSONObject();
JSONArray jsonUsers = new JSONArray();
json.put("users", jsonUsers);
JSONObject jsonUser1 = new JSONObject();
JSONObject jsonUser2 = new JSONObject();
jsonUsers.add(jsonUser1);
jsonUsers.add(jsonUser2); jsonUser1.put("username", "zhangsan");
jsonUser1.put("pwd", "123456");
jsonUser1.put("phone", "138****");
jsonUser2.put("username", "lisi");
jsonUser2.put("pwd", "abc");
jsonUser2.put("phone", "158****"); System.out.println(json.toJSONString());
}

json的解析和生成的更多相关文章

  1. golang xml和json的解析与生成

    golang中解析xml时我们通常会创建与之对应的结构体,一层层嵌套,完成复杂的xml解析. package main; import ( "encoding/xml" " ...

  2. iOS开发之JSON格式数据的生成与解析

    本文将从四个方面对IOS开发中JSON格式数据的生成与解析进行讲解: 一.JSON是什么? 二.我们为什么要用JSON格式的数据? 三.如何生成JSON格式的数据? 四.如何解析JSON格式的数据? ...

  3. android Json 解析和生成

    什么是json: JSON即JavaScript Object Natation的简称,它是一种轻量级的数据交换格式,非常适合服务器与JavaScript的交互.JSON易于人阅读和编写.同时也易于机 ...

  4. Json1:使用gson解析、生成json

    Json解析: 1.json第三方解析包:json-lib.gson.jackson.fastjson等2.Google-gson只兼容jdk1.5版本以上:JSON-lib分别支持1.4和1.53. ...

  5. 转载 -- iOS开发之JSON格式数据的生成与解析

    本文将从四个方面对IOS开发中JSON格式数据的生成与解析进行讲解: 一.JSON是什么? 二.我们为什么要用JSON格式的数据? 三.如何生成JSON格式的数据? 四.如何解析JSON格式的数据? ...

  6. Android原生生成JSON与解析JSON

    JSON数据是一种轻量级的数据交换格式,在Android中通常应用于client与server交互之间的传输数据.像如今在网上有非常多解析JSON数据的jar包,可是归根究竟用的都是Android原生 ...

  7. 使用gson解析,生成Json

    包:gson-2.3.jarJson文本解析为Java对象:Java对象生成为Json文本 import com.google.gson.Gson; public class TestGson { c ...

  8. JSON数据解析 基础知识及链接收集

    JSON数据解析学习 JSON介绍 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式. JSON 是存储和交换文本信息的语法.类似 XML.但是JSON 比 ...

  9. 浅谈JSON数据解析方法

    JSON数据解析 JSON是什么?? 如何把JSON数据解析出来 如何把一个字典转换为JSON JSON详细介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交 ...

随机推荐

  1. LNMP配置——Nginx配置 —— 配置静态文件不记录日志并添加过期时间

    一.配置 #vi /usr/local/nginx/conf/vhost/test.com.conf 写入; server { listen 80; server_name test.com test ...

  2. Apache配置 10. 访问控制-禁止解析PHP

    (1)简述 对于使用PHP语言编写的网站,有一些目录是有需求上传文件的.如果网站代码有漏洞,让黑客上传了一个用PHP写的木马,由于网站可以执行PHP程序,最终会让黑客拿到服务器权限. 为了避免这种情况 ...

  3. android分析之Parcel

    将数据打包,跨进程传输(通过Binder).看看这货究竟是啥玩意: Parcel.java : public final class Parcel { private static final boo ...

  4. P2260 [清华集训2012]模积和 【整除分块】

    一.题目 P2260 [清华集训2012]模积和 二.分析 参考文章:click here 具体的公式推导可以看参考文章.博主的证明很详细. 自己在写的时候问题不在公式推导,公式还是能够比较顺利的推导 ...

  5. 用 Numba 加速 Python 代码

    原文出自微信公众号:Python那些事 一.介绍 pip install numba Numba 是 python 的即时(Just-in-time)编译器,即当你调用 python 函数时,你的全部 ...

  6. Java 8 Stream API 详解

    Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作(aggregate operation),或者大批量数据操作 (b ...

  7. TEB 、TIB、PEB--Vista 32

    TEB struct TEB typedef struct _TEB { NT_TIB NtTib; PVOID EnvironmentPointer; CLIENT_ID ClientId; PVO ...

  8. PTA 数组循环右移

    6-2 数组循环右移 (20 分)   本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>)个整数,将每个整数循环向右移m(≥)个位置,即将a中的数据由(a​0​​a​1​​⋯ ...

  9. 当红开发语言Go,真的是未来的技术主流吗?

    摘要:文将详细介绍 Golang 的语言特点以及它的优缺点和适用场景,带着上述几个疑问,为读者分析 Go 语言的各个方面,以帮助初入 IT 行业的程序员以及对 Go 感兴趣的开发者进一步了解这个热门语 ...

  10. PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642 题目描述: People in Mars represent the c ...