浅谈使用java解析和生成JSON

JSON概述

JSON即javascript object notation,是javascript对象表示法的子集。具有以下特点:

数据放在键值对中;
数据由逗号分隔;
花括号表示对象;
方括号表示数组。

JSON的值可以是:

数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true或false)
数组(方括号内)
对象(花括号内)
null

JSON的基本语法

JSON对象

JSON对象在花括号中书写,对象可以包含多个键值对,例如:

{
  "firstName":"John",
  "lastName":"Doe"
}

JSON数组

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

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

在以上的实例中,根部的花括号表示这是一个JSON对象,该对象的键是employees,值是一个JSON数组,在这个数组中有3个JSON对象,每个JSON对象之间也使用逗号分隔。

使用java读取JSON数据

在JSON官网我们可以查看到各个语法对json的支持,对于java来说比较成熟的是google-gson。

其maven依赖如下:

<dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.2.4</version>
</dependency>

现在编写程序解析以下的test.json:

{
  "cat":"it",
  "languages":[
    {"id":1,"ide":"Eclipse","name":"Java"},
    {"id":2,"ide":"Xcode","name":"Swift"},
    {"id":3,"ide":"Visual Studio","name":"C#"}
  ],
  "pop":true
}

以下的代码将解析以上的json数据:

public void readJSON() throws Exception{

  // 创建json解析器
  JsonParser parser = new JsonParser();
  // 使用解析器解析json数据,返回值是JsonElement,强制转化为其子类JsonObject类型
  JsonObject object = (JsonObject) parser.parse(new FileReader("test.json"));

  // 使用JsonObject的get(String memeberName)方法返回JsonElement,再使用JsonElement的getAsXXX方法得到真实类型
  System.out.println("cat = " + object.get("cat").getAsString());

  // 遍历JSON数组
  JsonArray languages = object.getAsJsonArray("languages");
  for (JsonElement jsonElement : languages) {
    JsonObject language = jsonElement.getAsJsonObject();
    System.out.println("id = " + language.get("id").getAsInt() + ",ide = " + language.get("ide").getAsString() + ",name = " + language.get("name").getAsString());
  }

  System.out.println("pop = " + object.get("pop").getAsString());
}

使用java生成JSON数据

生成JSON数据的关键是JSON对象中的add和addProperty两个方法。前者用于向JSON对象中添加数组或者另一个JSON对象,后者用于为JSON对象添加属性。以下的代码将生成上面例子中的test.json。

public void createJSON() throws IOException{

  JsonObject object = new JsonObject(); // 创建一个json对象
  object.addProperty("cat", "it");    // 为json对象添加属性  

  JsonArray languages = new JsonArray(); // 创建json数组
  JsonObject language = new JsonObject();
  language.addProperty("id", 1);
  language.addProperty("ide", "Eclipse");
  language.addProperty("name", "java");
  languages.add(language);        // 将json对象添加到数组 

  language = new JsonObject();
  language.addProperty("id", 2);
  language.addProperty("ide", "XCode");
  language.addProperty("name", "Swift");
  languages.add(language);

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

  object.add("languages", languages);  // 将数组添加到json对象
  object.addProperty("pop", true);

  String jsonStr = object.toString();  // 将json对象转化成json字符串
  PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("data.json")));
  pw.print(jsonStr);
  pw.flush();
  pw.close();
}

在JAVA中构造和解析JSON我用的是org.json,下面是两个函数,一个是创建JSON,一个是从文本构造JSON并解析之。

创建json

//construct json and output it
public String jsonTest() throws JSONException{
  JSONObject json=new JSONObject();
  JSONArray jsonMembers = new JSONArray();
  JSONObject member1 = new JSONObject();
  member1.put("loginname", "zhangfan");
  member1.put("password", "userpass");
  member1.put("email","10371443@qq.com");
  member1.put("sign_date", "2007-06-12");
  jsonMembers.put(member1); 

  JSONObject member2 = new JSONObject();
  member2.put("loginname", "zf");
  member2.put("password", "userpass");
  member2.put("email","8223939@qq.com");
  member2.put("sign_date", "2008-07-16");
  jsonMembers.put(member2);
  json.put("users", jsonMembers); 

  return json.toString();
}

 解析json

//construct json from String and resolve it.
public String jsonTest2() throws JSONException{
  String jsonString="{\"users\":[{\"loginname\":\"zhangfan\",\"password\":\"userpass\",\"email\":\"10371443@qq.com\"},{\"loginname\":\"zf\",\"password\":\"userpass\",\"email\":\"822393@qq.com\"}]}";
  JSONObject json= new JSONObject(jsonString);
  JSONArray jsonArray=json.getJSONArray("users");
  String loginNames="loginname list:";
  for(int i=0;i<jsonArray.length();i++){
    JSONObject user=(JSONObject) jsonArray.get(i);
    String userName=(String) user.get("loginname");
    if(i==jsonArray.length()-1){
      loginNames+=userName;
    }else{
      loginNames+=userName+",";
    }
  }
  return loginNames;
}

JAVA中处理JSON还是相当方便的。

(0)

相关推荐

  • java解析任意层数json字符串的方法

    复制代码 代码如下: //解析策略,有可能是解析json字符串,有可能为数据中的图片地址,email等package cc.util.regex; public enum RegexPolicy { Json("Json"), Image("ImageFromHtml"); private String value; RegexPolicy (String value) {  this.value = value; } @Override public String

  • 使用Java构造和解析Json数据的两种方法(详解二)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包. 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Json数据的方法

  • java的json解析类库使用示例

    开源项目主页:https://github.com/dongfangshangren/Zson 复制代码 代码如下: import java.util.List;import java.util.ArrayList;import java.lang.reflect.Type;import org.zson.JsonSerializer;import org.zson.TypeReference;import org.zson.JsonDeserializer; import test.bean.

  • Java下利用Jackson进行JSON解析和序列化示例

    Java下常见的Json类库有Gson.JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的JSON操作方法. 一.准备工作 首先去官网下载Jackson工具包.Jackson有1.x系列和2.x系列,截止目前2.x系列的最新版本是2.2.3,2.x系列有3个jar包需要下载: jackson-core-2.2.3.jar(核心jar包,下载地址) jackson-annotations-2

  • Java中Json解析的方法分析

    本文实例讲述了Java中Json解析的方法.分享给大家供大家参考,具体如下: 首先准备一个JSON格式的字符串 * String JsonStr = "{object:{persons:" + "[{name:'呵呵',image:'http://10.0.159.132:8080/Web/s1.png'}," + "{name:'哈哈',image:'http://10.0.159.132:8080/Web/s1.png'}," + "

  • 使用Java构造和解析Json数据的两种方法(详解一)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包. 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Json数据的方法

  • JAVA使用Gson解析json数据实例解析

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成.同XML一样是一种"传输格式".JSON采用与编程语言无关的文本格式,便于数据传输.存储.交换. 封装类Attribute: public class Attribute { private int id; private String name; private int age; public int getId() { return id; } p

  • java解析php函数json_encode unicode 编码问题

    android开发中在和服务器端接口对接时出现编码问题,从服务器端获取到的数据是 "\u8bbe\u59071ID-\u8bbe\u59071\u540d\u79f0;\u8bbe\u59073id-\u8bbe\u59073\u540d\u79f0;\u8bbe\u59077id-\u8bbe\u59077\u540d\u79f0" 接口是通过php函数中json_encode进行编码后返回的,在客户端通过java.net.URLdecoder.decode()解码不管用,但是直接将

  • java中fastjson生成和解析json数据(序列化和反序列化数据)

    本文讲解2点: 1. fastjson生成和解析json数据 (举例:4种常用类型:JavaBean,List<JavaBean>,List<String>,List<Map<String,Object>) 2.通过一个android程序测试fastjson的用法. fastjson简介: Fastjson是一个Java语言编写的高性能功能完善的JSON库.fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jack

  • 对Java中JSON解析器的一些见解

    最近在研究JSON,Java中有很多处理JSON的类库,lib-json.sf-json.fastjson还有Jackson Json.第一个就不说了,性能和功能都没有什么亮点. sf-json最大的优点就是随机读取方便.代码很简单: JSONObject json= JSONObject.fromObject(str); 然后读取字段内容: json.getString或者getInt之类的.但是工作效率有待商榷,而且容易出错. 另外sf-json还有个优点就是自动使用unicode编码,当内

  • 基于java解析JSON的三种方式详解

    本文实例分析了基于java解析JSON的三种方式.分享给大家供大家参考,具体如下: 一.什么是JSON? JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度. JSON就是一串字符串 只不过元素会使用特定的符号标注. {} 双括号表示对象 [] 中括号表示数组 "" 双引号内是属性或值 : 冒号表示后者是前者的值(这个值可以是字符串.数字.也可以是另一个数组或对象) 所以 {"name"

  • java使用FastJson解析Json数据

    fastjson 是一个性能极好的用 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发. 主要特点: 快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson) 强大(支持普通JDK类包括任意Java Bean Class.Collection.Map.Date或enum) 零依赖(没有依赖其它任何类库除了JDK) 一 .生成Json: JavaBean.List<JavaBean>.List<String>.List<Map&l

随机推荐