什么是 Json?
  JSON(JvaScript Object Notation)(官网网站:http://www.json.org/)是 一种轻量级的数据交换格式。 
  易于人阅读和编写。同时也易于机器解析和生成。它基于 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一个子集。
  JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使 JSON 成为理想的数据交换语言。

JSON 的两种结构
 1.“名称/值”对的集合(A collection of name/value pairs)。
  不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表 (hash table),有键列表(keyed list),或者关联数组 (associative array)。
  在 Java 语言中,我们可以将它理解成 HashMap。
  对象是一个无序的"'名称/值'对"集合。一个对象以"{"(左括号)开始,"}"(右括号)结束。每个“名称”后跟一个":"(冒号);"'名称/值' 对"之间使用","(逗号)分隔。
  示例:var json = {"name":"Jack","age":90,"Marray":true};

  

 2. 值的有序列表(An ordered list of values)。
  在大部分语言中,它被理解为数组(Array 或 List)。
  数组是值(value)的有序集合。一个数组以"["(左中括号)开始,"]"(右中括号)结束。值之间使用","(逗号)分隔。
  示例:var json = ["Jack","Rose","Tom",89,true,false];

  

Java中对json的操作常用的方式有两种:org.json.jar 和 json-lib.jar

一、使用org.json.jar(下载)

  

 import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import com.kevin.paper.entity.PubPaper;
import com.kevin.paper.entity.PubPaperAuthor; public class Test {
public String jsonConstruct(){
JSONObject json=new JSONObject();
json.put("Article_id", "66496");
json.put("Title", "Exploring the beta quadrant");
json.put("Author", "Pietarinen, Ahti-Veikko");
json.put("Journal", "SYNTHESE");
json.put("ISSN", "0039-7857");
json.put("PublishDate", "2015-04-01");
json.put("Pages", "941-970");
json.put("SCI", "true");
json.put("EI", "false");
json.put("SSCI", "true");
//嵌套json
JSONArray jsonMembers = new JSONArray();
JSONObject author1 = new JSONObject();
author1.put("ZZGH", "150026");
author1.put("ZZXM", "AHTI-VEIKKO PIETARINEN");
author1.put("SFDYZZ","1");
author1.put("SFTXZZ", "1");
jsonMembers.put(author1);
json.put("Authors", jsonMembers); return json.toString();
} public PubPaper jsonAnalysis(){
PubPaper pubPaper = new PubPaper();
String jsonData="{\"Article_id\":66496,\"Title\":\"Exploring the beta quadrant\",\"Author\":\"Pietarinen, Ahti-Veikko\"," +
"\"Journal\":\"SYNTHESE\",\"ISSN\":\"0039-7857\",\"PublishDate\":\"2015-04-01\",\"Pages\":\"941-970\"," +
"\"SCI\":\"true\",\"EI\":\"false\",\"SSCI\":\"true\"," +
"\"Authors\":[{\"ZZGH\":\"150026\",\"ZZXM\":\"AHTI-VEIKKO PIETARINEN\",\"SFDYZZ\":1,\"SFTXZZ\":1}]}";
JSONObject json= new JSONObject(jsonData);
pubPaper.setArticle_id(json.get("Article_id").toString());
pubPaper.setTitle(json.get("Title").toString());
pubPaper.setAuthor(json.get("Author").toString());
pubPaper.setJournal(json.get("Journal").toString());
pubPaper.setISSN(json.get("ISSN").toString());
pubPaper.setPublishDate(json.get("PublishDate").toString());
pubPaper.setPages(json.get("Pages").toString());
pubPaper.setSCI(json.get("SCI").toString());
pubPaper.setEI(json.get("EI").toString());
pubPaper.setSSCI(json.get("SSCI").toString());
//解析嵌套的json转换成对象集合
List<PubPaperAuthor> pubAuthorList = new ArrayList();
JSONArray jsonArray=json.getJSONArray("Authors");
for(int i=0;i<jsonArray.length();i++){
JSONObject author=(JSONObject) jsonArray.getJSONObject(i);
PubPaperAuthor pubPaperAuthor = new PubPaperAuthor();
pubPaperAuthor.setZZGH(author.get("ZZGH").toString());
pubPaperAuthor.setZZXM(author.get("ZZXM").toString());
pubPaperAuthor.setSFDYZZ(author.get("SFDYZZ").toString());
pubPaperAuthor.setSFTXZZ(author.get("SFTXZZ").toString());
pubAuthorList.add(pubPaperAuthor);
}
pubPaper.setAuthors(pubAuthorList);
return pubPaper;
}
}

二、使用json-lib(下载)

json-lib 是一个 Java 类库(官网:http://json-lib.sourceforge.net/)可以实现如下功能:

  转换 javabeans, maps, collections, java arrays 和 XML 成为 json 格式数据
  转换 json 格式数据成为 javabeans 对象
  Json-lib 需要的 jar 包:

    commons-beanutils-1.8.3.jar
    commons-collections-3.2.1.jar
    commons-lang-2.6.jar
    commons-logging-1.1.1.jar
    ezmorph-1.0.6.jar
    json-lib-2.4-jdk15.jar

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set; import com.kevin.person.entity.Person; import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig; public class Test {
/** 将 Array 解析成 Json 串。使用 JSONArray 可以解析 Array 类型 */
public void arrayToJSON() {
// 将 Array 解析成 Json 串
String[] str = { "Jack", "Tom", "90", "true" };
JSONArray json = JSONArray.fromObject(str);
System.err.println(json);// ["Jack","Tom","90","true"] // 对像数组,注意数字和布而值
Object[] o = { "北京", "上海", 89, true, 90.87 };
json = JSONArray.fromObject(o);
System.err.println(json);// ["北京","上海",89,true,90.87] // 使用集合类
List<String> list = new ArrayList<String>();
list.add("Jack");
list.add("Rose");
json = JSONArray.fromObject(list);
System.err.println(json);// ["Jack","Rose"] // 使用 set 集
Set<Object> set = new HashSet<Object>();
set.add("Hello");
set.add(true);
set.add(99);
json = JSONArray.fromObject(set);
System.err.println(json);// [99,true,"Hello"]
} /** 将 JavaBean/Map 解析成 JSON 串。 使用JSONObject 解析 */
public void javaBeanOrMapToJSON() {
JSONObject jsonObject = new JSONObject();
// 解析 HashMap
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "Tom");
map.put("age", 33);
// 解析 JavaBean
Person person = new Person("A001", "Jack");
// jsonObject = jsonObject.fromObject(person);
// 解析嵌套的对象
map.put("person", person);
jsonObject = JSONObject.fromObject(map);
System.out.println(jsonObject);// {"person":{"id":"A001","name":"Jack"},"age":33,"name":"Tom"}
} /** 使用 JsonConfig 过虑属性:适用于 JavaBean/Map */
public void jsonConfigForJavaBeanOrMap() {
JsonConfig config = new JsonConfig();
config.setExcludes(new String[] { "name" });// 指定在转换时不包含哪些属性
Person person = new Person("A001", "Jack");
JSONObject jsonObject = JSONObject.fromObject(person, config);// 在转换时传入之前的配置对象
System.out.println(jsonObject);// {"id":"A001"}
} /** 将 Json 串转换成 Array */
public void jsonToArray() {
JSONArray jsonArray = JSONArray.fromObject("[89,90,99]");
Object array = JSONArray.toArray(jsonArray);
System.out.println(array);// [Ljava.lang.Object;@1e5003f6
System.out.println(Arrays.asList((Object[]) array));// [89, 90, 99]
} /** 将 Json 串转成 JavaBean/Map */
public void jsonToJavaBeanOrMap() {
// 将 Json 形式的字符串转换为 Map
String str = "{\"name\":\"Tom\",\"age\":90}";
JSONObject jsonObject = JSONObject.fromObject(str);
Map<String, Object> map = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class);
System.out.println(map);// {age=90, name=Tom} // 将 Json 形式的字符串转换为 JavaBean
str = "{\"id\":\"A001\",\"name\":\"Jack\"}";
jsonObject = JSONObject.fromObject(str);
System.out.println(jsonObject);
Person person = (Person) JSONObject.toBean(jsonObject, Person.class);
System.out.println(person);// Person [id=A001, name=Jack]
}
}

Java中json的构造和解析的更多相关文章

  1. java中json数据生成和解析(复杂对象演示)

    1.json简单介绍 1.1 json是最流行和广泛通用的数据传输格式,简称JavaScript Object Notation,最早在JavaScript中使用. 1.2 举个例子,下面是一个jso ...

  2. java中json的使用和解析

    1.创建json对象 1.1 创建JSONObject对象 使用map初始化json @Test public void test1() { Map<String, Object> map ...

  3. Java中JSON字符串与java对象的互换实例详解

    这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...

  4. java中 json和bean list map之间的互相转换总结

    JSON 与 对象 .集合 之间的转换 JSON字符串和java对象的互转[json-lib]   在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级 ...

  5. (转)Java中JSON字符串与java对象的互换实例详解

    在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...

  6. Java中JSON字符串与java对象的互换实例详解(转)

    http://www.jb51.net/article/90914.htm 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要 ...

  7. Java中 Json的使用

    转自:http://huyan.couplecoders.tech/%E5%BC%80%E5%8F%91%E8%80%85%E6%89%8B%E5%86%8C/2018/11/02/Java%E4%B ...

  8. Java学习笔记--xml构造与解析之Sax的使用

    汇总:xml的构造与解析 http://www.cnblogs.com/gnivor/p/4624058.html 参考资料:http://www.iteye.com/topic/763895 利用S ...

  9. Java中json工具对比分析

    Java中几个json工具分析 1, 环境 JDK1.6+IDE(IntelliJ IDEA)+windowsXP+GBK编码 2,分析对象 jackson1.8.2 http://jackson.c ...

随机推荐

  1. [源码]Literacy 快速反射读写对象属性,字段

    Literacy 说明 Literacy使用IL指令生成方法委托,性能方面,在调用次数达到一定量的时候比反射高很多 当然,用IL指令生成一个方法也是有时间消耗的,所以在只使用一次或少数几次的情况,不但 ...

  2. ABP(现代ASP.NET样板开发框架)系列之4、ABP模块系统

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之4.ABP模块系统 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...

  3. Entity Framework 6 Recipes 2nd Edition(11-11)译 -> 在LINQ中调用数据库函数

    11-11. 在LINQ中调用数据库函数 问题 相要在一个LINQ 查询中调用数据库函数. 解决方案 假设有一个任命(Appointment )实体模型,如Figure 11-11.所示, 我们想要查 ...

  4. Struts2+Spring+Hibernate框架整合总结详细教程

    一.SSH三大框架知识总结 Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与S ...

  5. SqlHelper中IN集合场景下的参数处理

    我手头有个古老的项目,持久层用的是古老的ADO.net.前两天去昆明旅游,其中的一个景点是云南民族村,通过导游介绍知道了一个古老的民族——基诺族,“基”在这个族内代表舅舅,“基诺”意为“跟在舅舅后边” ...

  6. thinkphp - 复合查询(or、and 联合使用的方法)

    条件:查询今天内邮箱和QQ其中一项都不为空的有效数据的查询 释义:(or 条件)email  不为空 或者 qq_no 不为空    (and 条件) is_deleted 为0 并且 create_ ...

  7. CSS系列:CSS常用样式

    1. 通用样式 Base.css * { margin:; padding:; } body { width: 1000px; margin: 0 auto; font-size: 12px; fon ...

  8. 【WCF】操作选择器

    在开始吹牛之前,先说说.net Core的事情. 你不能把.NET Core作为全新体系来学习,因为它也是.NET.关于.NET Core,老周并不打算写什么,因为你懂了.NET,就懂了.NET Co ...

  9. img.width一直是0的问题--记录(二)

    var img=new Image(); img.src="图片路径"; 然后调用 img.width img.height 你会发现值是0: 这是因为页面在加载的时候图片是最后的 ...

  10. [转]Linux中configure/makefile

    本文教你如何使用autoconf.automake等来制作一个以源代码形式(.tar.gz)发布的软件.并可在执行configure时使用自定义参数. 一.概述和基础知识 在Linux下得到一个以源代 ...