[J2EE]java操作json

简介: 一、JSON语法JSON:JavaScript 对象表示法(JavaScript Object Notation),JSON 是存储和交换文本信息的语法。

一、JSON语法

JSON:JavaScript 对象表示法(JavaScript Object Notation),JSON 是存储和交换文本信息的语法。类似 XML,但 比 XML 更小、更快,更易解析。
JSON 数据的书写格式是:名称/值对。
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:

"firstName" : "John"

JSON 数组在方括号中书写:
数组可包含多个对象:

{
    "employees": [
        { "firstName":"John" , "lastName":"Doe" },
        { "firstName":"Anna" , "lastName":"Smith" },
        { "firstName":"Peter" , "lastName":"Jones" }
     ]
}

二、GSON简介

Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。下载jar包:http://download.csdn.net/detail/yang_xing_/8363795。在eclipse中新建一个java project,把gson-2.2.4.jar引入。在工程根目录下创建一个employee.json文件:

{
    "department":"design",
    "employees": [
        { "firstName":"Bill" , "lastName":"Gates" },
        { "firstName":"George" , "lastName":"Bush" },
        { "firstName":"Thomas" , "lastName":"Carter" }
    ]
}

二、读取json

首先创建一个json解析器,然后创建一个JsonObject对象,之后调用get方法访问属性值:

package ucas.json.test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import com.google.gson.JsonIOException;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonSyntaxException;

public class JsonTest {

    public static void main(String[] args) {
        try {
            JsonParser jParser = new JsonParser();
            JsonObject jObject = (JsonObject) jParser
                    .parse(new FileReader("employee.json"));
            System.out.println(jObject.get("department").getAsString());
            System.out.println(jObject.get("employees"));
        } catch (JsonIOException e) {
            e.printStackTrace();
        } catch (JsonSyntaxException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

}

输出结果:

design
[{"firstName":"Bill","lastName":"Gates"},{"firstName":"George","lastName":"Bush"},{"firstName":"Thomas","lastName":"Carter"}]

可以看到”employees”属性为数组,转化为JsonArray然后循环读取:

package ucas.json.test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;

import com.google.gson.JsonArray;
import com.google.gson.JsonIOException;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonSyntaxException;

public class JsonTest {

    public static void main(String[] args) {
        try {
            JsonParser jParser = new JsonParser();
            JsonObject jObject = (JsonObject) jParser
                    .parse(new FileReader("employee.json"));
            System.out.println(jObject.get("department").getAsString());

            JsonArray jArray=(JsonArray) jObject.get("employees");
            for (int i = 0; i < jArray.size(); i++) {
                System.out.println("-----------");
                JsonObject jObject2=(JsonObject) jArray.get(i);
                System.out.println("id:"+jObject2.get("id").getAsString());
                System.out.println("firstName:"+jObject2.get("firstName").getAsString());
                System.out.println("lastName:"+jObject2.get("lastName").getAsString());
            }

        } catch (JsonIOException e) {
            e.printStackTrace();
        } catch (JsonSyntaxException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

}

输出结果:

design
-----------
id:1
firstName:Bill
lastName:Gates
-----------
id:1
firstName:George
lastName:Bush
-----------
id:3
firstName:Thomas
lastName:Carter

三、创建json

创建json对象,添加属性使用addProperty方法,添加对象使用add方法,例子:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

public class JsonDemo2 {

    public static void main(String[] args) {

        // 创建json数据
        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("cat", "it");

        JsonArray jArray = new JsonArray();

        JsonObject lan1 = new JsonObject();
        lan1.addProperty("id", 1);
        lan1.addProperty("name", "java");
        lan1.addProperty("ide", "eclipse");
        jArray.add(lan1);

        JsonObject lan2 = new JsonObject();
        lan2.addProperty("id", 2);
        lan2.addProperty("name", "C++");
        lan2.addProperty("ide", "VC6.0");
        jArray.add(lan2);

        JsonObject lan3 = new JsonObject();
        lan3.addProperty("id", 3);
        lan3.addProperty("name", "C#");
        lan3.addProperty("ide", "Visual Studio");
        jArray.add(lan3);

        JsonObject lan4 = new JsonObject();
        lan4.addProperty("id", 4);
        lan4.addProperty("name", "Swift");
        lan4.addProperty("ide", "Xcode");
        jArray.add(lan4);

        jsonObject.add("languages", jArray);
        jsonObject.addProperty("pop", true);
        System.out.println(jsonObject);

        File jsonFile = new File("test.json");
        try {
            jsonFile.createNewFile();
            FileOutputStream fos = new FileOutputStream(jsonFile);
            OutputStreamWriter osq = new OutputStreamWriter(fos);
            BufferedWriter bfw = new BufferedWriter(osq);
            bfw.write(jsonObject.toString());

            bfw.close();
            osq.close();
            fos.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

这样在工程根目录下会生成一个test.json的文件:

{"cat":"it","languages":[{"id":1,"name":"哈哈","ide":"eclipse\n"},{"id":2,"name":"C++","ide":"VC6.0"},{"id":3,"name":"C#","ide":"Visual Studio"},{"id":4,"name":"Swift","ide":"Xcode"}],"pop":true}

总结:

  1. json简介和语法可以参考json官网http://www.json.org/和W3C教程JSON教程
  2. 操作json的库有很多,可以选择学习。
目录
相关文章
|
15天前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
67 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
28天前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
41 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
5月前
|
Java BI 数据处理
如何在Java中实现Excel操作
如何在Java中实现Excel操作
|
2月前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
159 0
在Java中处理JSON数据:Jackson与Gson库比较
|
2月前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
138 1
|
3月前
|
JSON Java fastjson
java小工具util系列3:JSON和实体类转换工具
java小工具util系列3:JSON和实体类转换工具
36 2
|
3月前
|
JSON 前端开发 JavaScript
java中post请求调用下载文件接口浏览器未弹窗而是返回一堆json,为啥
客户端调接口需要返回另存为弹窗,下载文件,但是遇到的问题是接口调用成功且不报错,浏览器F12查看居然返回一堆json,而没有另存为弹窗; > 正确的效果应该是:接口调用成功且浏览器F12不返回任何json,而是弹窗另存为窗口,直接保存文件即可。
158 2
|
4月前
|
JSON Java API
在 Java 中解析 JSON ArrayList 的详细指南
【8月更文挑战第23天】
101 1
|
4月前
|
JSON Java 数据格式
Java系列之:如何取出嵌套JSON中的数据值
这篇文章介绍了如何在Java中取出嵌套JSON数据值的方法,通过使用`JSONObject`类及其`getJSONObject`和`get`方法来逐步解析和提取所需的数据。
Java系列之:如何取出嵌套JSON中的数据值
|
4月前
|
JSON Java 数据格式
Java系列之:生成JSON字符串
这篇文章介绍了两种在Java中生成JSON字符串的方法:使用`JSONObject`类及其`toJSONString`方法来动态生成,以及手动拼接字符串的方式来创建JSON格式的字符串。
Java系列之:生成JSON字符串
下一篇
DataWorks