本文主要讲述如下几个内容:

1、JSON定义以及JSON的特性

2、如何在JavaScript中解释JSON格式数据

3、如何在Java代码中使用JSON(讲对象转换成JSON对象以及解释JSON字符串)

一、JSON

Json是JavaScriptObjectNotation),是轻量级的文本数据交换格式,具有层级结构(值中存在值),数据可使用

AJAX 进行传输,独立于语言,具有自我描述性,比XML更小更快更容易解析。JSON格式字符串转化为JavaScript对象无需解析器,JSON 使用 JavaScript 语法,使用JavaScript的eval()函数可生成JavaScript对象。

下面给出JSON格式的数据,非常清晰,无需多做解释,语法请阅读官方文档。

标准JSON格式数据

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

标准JSON格式数组数据

{

"employees": [

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

{ "firstName":"Anna" , "lastName":"Smith" },

{ "firstName":"Peter" , "lastName":"Jones" }

]

}

或直接赋值给变量:

var employees = [

{ "firstName":"Bill" , "lastName":"Gates" },

{ "firstName":"George" , "lastName":"Bush" },

{ "firstName":"Thomas" , "lastName": "Carter" }

];

二、在JavaScript中解释JSON数据

JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。

下面直接给出代码示例:

function  testjson(){

//Json格式的字符串

var txt='{ "employees" : ['+

'{ "firstName":"Bill" , "lastName":"Gates" },' +

'{ "firstName":"George" , "lastName":"Bush" },' +

'{ "firstName":"Thomas" , "lastName":"Carter" } ]}';

//使用eval函数转换成JSON对象

//eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:

var obj=eval("(" + txt

+ ")");

//通过对象名,然后根据数组下标以及属性名取值

alert(obj.employees[0].firstName);

}

Click me!

function testjson(){

//Json格式的字符串

var txt = '{ "employees" : [' +

'{ "firstName":"Bill" , "lastName":"Gates" },' +

'{ "firstName":"George" , "lastName":"Bush" },' +

'{ "firstName":"Thomas" , "lastName":"Carter" } ]}';

//使用eval函数转换成JSON对象

//eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:

var obj = eval ("(" + txt

+ ")");

//通过对象名,然后根据数组下标以及属性名取值

alert(obj.employees[0].firstName);

}

Click me!

直接保存为后缀名为html或htm的文件,用浏览器打开,就可以测试运行结果了。

三、Java操作JSON

1、Josn-lib

JSON-lib这个Java类包用于把bean,map和XML转换成JSON并能够把JSON转回成bean和DynaBean。

下载地址:http://json-lib.sourceforge.NET/

还要需要的第3方包:

rg.apache.commons(3.2以上版本)

org.apache.oronet.sf.

ezmorph(ezmorph-1.0.4.jar)

nu.xom

下面直接给出代码:

packagecom.doyeden.json;

importjava.util.ArrayList;

importjava.util.HashMap;

importjava.util.List;

importjava.util.Map;

importorg.apache.commons.beanutils.PropertyUtils;

importnet.sf.json.JSONArray;

importnet.sf.json.JSONObject;

importnet.sf.json.xml.XMLSerializer;

publicclassTestJson {

publicstaticvoidmain(String[] args) {

// 1. List

boolean[] booleanArray =newboolean[] {false,false,true,false};

JSONArray ja = JSONArray.fromObject(booleanArray);

System.err.println(ja);

List list = newArrayList();

list.add("first");

list.add("second");

JSONArray jsonArray2 = JSONArray.fromObject(list);

System.out.println(jsonArray2);

JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']");

System.out.println(jsonArray3);

// 2. Map

Map map = newHashMap();

map.put("name","json");

map.put("bool", Boolean.TRUE);

map.put("int",newInteger(1));

map.put("arr",newString[] {"a","b"});

map.put("func","function(i){ return this.arr[i]; }");

JSONObject json = JSONObject.fromObject(map);

System.out.println(json);

// 3. JSON Bean

JSONObject jsonObject = JSONObject.fromObject(newJsonBean("kevin",

"Male"));

System.out.println(jsonObject);

// 4. Json Beans

List lbs = newArrayList();

JsonBean j1 = newJsonBean("kevin","Male");

JsonBean j2 = newJsonBean("maimai","Femal");

lbs.add(j1);

lbs.add(j2);

JSONArray ja_beans = JSONArray.fromObject(lbs);

System.out.println(ja_beans);

}

}package com.doyeden.json;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.apache.commons.beanutils.PropertyUtils;

import net.sf.json.JSONArray;

import net.sf.json.JSONObject;

import net.sf.json.xml.XMLSerializer;

public class TestJson {

public static void main(String[] args) {

// 1. List

boolean[] booleanArray = new boolean[] { false, false, true, false };

JSONArray ja = JSONArray.fromObject(booleanArray);

System.err.println(ja);

List list = new ArrayList();

list.add("first");

list.add("second");

JSONArray jsonArray2 = JSONArray.fromObject(list);

System.out.println(jsonArray2);

JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']");

System.out.println(jsonArray3);

// 2. Map

Map map = new HashMap();

map.put("name", "json");

map.put("bool", Boolean.TRUE);

map.put("int", new Integer(1));

map.put("arr", new String[] { "a", "b" });

map.put("func", "function(i){ return this.arr[i]; }");

JSONObject json = JSONObject.fromObject(map);

System.out.println(json);

// 3. JSON Bean

JSONObject jsonObject = JSONObject.fromObject(new JsonBean("kevin",

"Male"));

System.out.println(jsonObject);

// 4. Json Beans

List<JsonBean> lbs = new ArrayList<JsonBean>();

JsonBean j1 = new JsonBean("kevin", "Male");

JsonBean j2 = new JsonBean("maimai", "Femal");

lbs.add(j1);

lbs.add(j2);

JSONArray ja_beans = JSONArray.fromObject(lbs);

System.out.println(ja_beans);

}

}

下面的类的get和set方法必须有才可以

packagecom.doyeden.json;

publicclassJsonBean {

privateString name;

privateString sex;

publicJsonBean() {

super();

}

publicJsonBean(String name, String sex) {

super();

this.name = name;

this.sex = sex;

}

publicString getName() {

returnname;

}

publicvoidsetName(String name) {

this.name = name;

}

publicString getSex() {

returnsex;

}

publicvoidsetSex(String sex) {

this.sex = sex;

}

}package com.doyeden.json;

public class JsonBean {

private String name;

private String sex;

public JsonBean() {

super();

}

public JsonBean(String name, String sex) {

super();

this.name = name;

this.sex = sex;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

}

程序运行结果:

[false,false,true,false]

["first","second"]

["json","is","easy"]

{"arr":["a","b"],"int":1,"name":"json","func":function(i){returnthis.arr[i]; },"bool":true}

{"name":"kevin","sex":"Male"}

[{"name":"kevin","sex":"Male"},{"name":"maimai","sex":"Femal"}][false,false,true,false]

["first","second"]

["json","is","easy"]

{"arr":["a","b"],"int":1,"name":"json","func":function(i){ return this.arr[i]; },"bool":true}

{"name":"kevin","sex":"Male"}

[{"name":"kevin","sex":"Male"},{"name":"maimai","sex":"Femal"}]2、 目前比较流行的fast-json解析 ,更多fast-json请自行查阅文档

阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:

速度最快,测试表明,fastjson具有极快的性能,超越任其他的JavaJson parser。包括自称最快的JackJson;

功能强大,完全支持javaBean、集合、Map、日期、Enum,支持范型,支持自省;无依赖,能够直接运行在

Java SE 5.0以上版本;支持Android;开源 (Apache 2.0)

Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。

publicstaticfinalObject

parse(String text);//

把JSON文本parse为JSONObject或者JSONArray

publicstaticfinalJSONObject

parseObject(String text);//

把JSON文本parse成JSONObject

publicstaticfinalT

parseObject(String text, Class clazz);//

把JSON文本parse为JavaBean

publicstaticfinalJSONArray

parseArray(String text);//

把JSON文本parse成JSONArray

publicstaticfinalList

parseArray(String text, Class clazz);//把JSON文本parse成JavaBean集合

publicstaticfinalString

toJSONString(Object object);//

将JavaBean序列化为JSON文本

publicstaticfinalString

toJSONString(Object object,booleanprettyFormat);//

将JavaBean序列化为带格式的JSON文本

publicstaticfinalObject

toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray。

实例代码:

(需要导入fastjson的jar包)

packagecom.doyeden.json.fastjson;

importjava.util.ArrayList;

importjava.util.List;

importcom.alibaba.fastjson.JSON;

importcom.doyeden.json.JsonBean;

publicclassTest {

publicstaticvoidmain(String[] args) {

//1 parse bean to json text

JsonBean jb=newJsonBean("kevin","Male");

System.out.println(JSON.toJSONString(jb));

//2 parse list to json array

List ljs=newArrayList();

JsonBean jb1=newJsonBean("kevin","Male");

JsonBean jb2=newJsonBean("maimai","Female");

ljs.add(jb2);

ljs.add(jb1);

System.out.println(JSON.toJSONString(ljs));

//3 parse json text to bean

String s="{\"name\":\"greg\",\"sex\":\"Male\"}";

JSON jO=JSON.parseObject(s);

JsonBean j=JSON.toJavaObject(jO, JsonBean.class);

System.out.println(j.getName());

}

}package com.doyeden.json.fastjson;

import java.util.ArrayList;

import java.util.List;

import com.alibaba.fastjson.JSON;

import com.doyeden.json.JsonBean;

public class Test {

public static void main(String[] args) {

//1 parse bean to json text

JsonBean jb=new JsonBean("kevin","Male");

System.out.println(JSON.toJSONString(jb));

//2 parse list to json array

List<JsonBean> ljs=new ArrayList<JsonBean>();

JsonBean jb1=new JsonBean("kevin","Male");

JsonBean jb2=new JsonBean("maimai","Female");

ljs.add(jb2);

ljs.add(jb1);

System.out.println(JSON.toJSONString(ljs));

//3 parse json text to bean

String s="{\"name\":\"greg\",\"sex\":\"Male\"}";

JSON jO=JSON.parseObject(s);

JsonBean j=JSON.toJavaObject(jO, JsonBean.class);

System.out.println(j.getName());

}

}

结果:

{"name":"kevin","sex":"Male"}

[{"name":"maimai","sex":"Female"},{"name":"kevin","sex":"Male"}]

greg

3、其他方式,例如 org-lib等,使用方法跟上述两种方式非常相似。就不做更多介绍了。个人推荐还是使用fast-json。

总结:本文讲述了JSON格式数据以及如何在JavaScript和Java代码中操作JSON格式数据,可以发现,因为JSON自解释性,轻量级,体积小,跨平台等特点,JSON格式数据非常适合作为和后端数据交互的格式。JavaScript本身就可以解释JSON,这样就省去了很多第三方库,java中,关于讲JSON转换成Java对象以及讲Java对象和对象数组转换成JSON格式数据的类库其实有很多,但是目前来说最快的是fastjson.

java json 本身_JSON以及Java转换JSON的方法(前后端常用处理方法)相关推荐

  1. java计算机毕业设计基于springboot+vue+elementUI的实验室管理系统(前后端分离)

    项目介绍 科技水平一直是体现一个国家强弱的重要标志,而科技的一点诞生地是实验室,如果能够更好的对实验室进行管理是很多实验室管理人员一直研究的一个问题.只有更加科学和合理化的利用实验室才能够更好的让科技 ...

  2. c语言json数据转换成字符串,Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)...

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族 ...

  3. php将数组转化成json字符串,php数组如何转换json字符串

    php数组转换json字符串的方法:首先创建一个php示例文件:然后定义一组数组数据:最后通过"json_encode($color)"方法将数组转换成json字符串即可. PHP ...

  4. java api文档_细说API – 文档和前后端协作

    在上一篇文章--<细说API – 重新认识RESTful>中介绍了如何理解和设计RESTful风格的API,现在我们来聊聊如何有效的呈现API文档,以及前后端协作的方式. 我经历过一些没有 ...

  5. java不同项目加token访问_利用JWT实现前后端分离的Token验证

    写在前面:本篇文章的代码图片展示均使用carbon绘制,图片质量很高,如果图片过小可以点击查看原图.项目实例前端部分使用基于Angular的Ionic框架(TypeScript),使用Spring B ...

  6. java基于SpringBoot+vue 的简历模板分享系统 elementui前后端分离

    目前许多人仍将传统的纸质工具作为信息管理的主要工具,而网络技术的应用只是起到辅助作用.在对网络工具的认知程度上,较为传统的office软件等仍是人们使用的主要工具,而相对全面且专业的简历系统的信息管理 ...

  7. java基于springboot +vue的图书馆图书借阅系统 nodejs前后端分离

    随着社会的进步,人民生活水平的提高,越来越多的人开始重视自己精神方面的提高,图书成为越来越多人的选择,随之而来的是图书馆借还图书的火热.越来越多的人开始选择读书,借阅书籍,过去传统的手工操作式的租赁方 ...

  8. java基于springboot+vue的社区居民健康管理系统 nodejs 前后端分离

    社区卫生服务是为了解决群众看病难.看病贵问题,是为群众提供廉价便捷医疗保健服务的.社区卫生服务中心承担着医疗诊断.疾病控制.健康教育等多项业务活动,在日常工作中会产生大量的档案资料,居民健康档案就是非 ...

  9. java基于springboot+vue的家具用品销售商城系统 前后端分离nodejs含商家用户

    在21世纪的今天.社会的不断发展和进步当中,人民对于计算机信息科学化认识的程度越来越高.由以前我们的感性认识.到现在理性认识提高了,管理员的工作重要性也越来越高,科学化现代管理手段,使现代化信息存储. ...

  10. Java基于springboot+vue的汽车饰品销售购物商城系统 前后端分离

    开发背景 随着我国科技和经济的发展,我国的汽车数量也越来越多,基本家家户户都拥有了自己的汽车,为了让汽车用起来更加的舒心,于是各类琳琅满目的汽车饰品也出现了.大多数时候人们在购买汽车饰品的时候都回到这 ...

最新文章

  1. Java方法的引用(打造Lambda表达式的升级版)
  2. boost::histogram::make_profile用法的测试程序
  3. 市场规模占全国4成,广东物联网市场发展强劲
  4. linux下加入回收站功能
  5. PHP-CGI, FastCGI, PHP-FPM的关系和区别
  6. 这样给数组初始化,你肯定没有见过
  7. 前端开发小工具SuperApp——Ctrl+S自动刷新浏览器
  8. Objective-C 之category
  9. 液晶屏字模提取软件问题总结·
  10. 推荐一个在线的icon图片合成工具(CSS Sprite)
  11. Spirent Testcenter基本配置使用说明_1022
  12. 原win7系统迁移到SSD固态硬盘
  13. vivo计算机的隐藏功能教程,Vivo手机的5个隐藏功能,真的很实用,一定要打开
  14. 创维E900V22C、E900V22D系列-UWE5621DS芯片语音免拆卡刷固件(当贝桌面)《创维简约开机动画》
  15. 利用selenium 爬取豆瓣 武林外传数据并且完成 数据可视化 情绪分析
  16. C语言中的自定义函数
  17. OnCreate函数
  18. 基于Python个人博客系统设计与实现 开题报告
  19. mac 13.0 自动关机设置
  20. 2022-2028全球食品级柠檬酸镁行业调研及趋势分析报告

热门文章

  1. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_9_Thread类的常用方法_获取线程名称...
  2. Dockerfile 中的 CMD 与 ENTRYPOINT
  3. angularjs基础知识1
  4. 手机通话记录统计分析
  5. db.serverStatus()
  6. TypeError: this.getResolve is not a function
  7. Axios插件和loading的实现
  8. Linux网络编程--socket
  9. 在iOS开发中,我们会遇到十六进制和字符串之间相互转换,话不多说,直接上代码:...
  10. Remove Untagged Images From Docker