一、json概要

JSON(JavaScript Object Notation, JS 对象标记)-一种轻量级数据交换标准(相对xml),独立于编程语言。具体以逗号分隔的key:value键值对形式体现,主要表现形式包括两种:{对象},[数组]。其中,key以string表达;value包括string、数值、boolean值、对象、数组(可嵌套)。

二、json 结构

2.1 json的两种数据结构

  • {对象},A collection of key/value pairs(一个key/value对的集合). 在不同的编程语言中,可能体现为一个 object, record, struct, dictionary, hash table, keyed list, or associative array。
  • [数组]An ordered list of values(一/多个value的有序列表).

2.2 Format of json

[说明,如下5图来自json.org]

a) object:一个无序的 key/value对集合。

如图object所示:一个object以“{”开始,以“}”结尾, key/value对以逗号分隔(key必须是String-参考d) string说明);

{"name":"spy","sex":"girl","age":123}

b) array:values的有序集合。

一个数组以“[”开始,以“]”结尾,values以逗号分隔(value可取何值,请参考图c) value说明);

实例1:["spy","gk"]
实例2:[{"name":"spy","sex":"girl"},{"name":"gk","sex":"boy"}]

c) value取值

A value可以是简单的用双引号引起的string串,也可以是一个数值,or boolean值(true or false) or null, 也可以是复杂的object or an array,这些取值可以嵌套。

d) string:双引号引起的一串unicode字符

在此,要注意某些特殊的字符,需经过“\”进行转义,这些特殊字符与转义字符共同表示一个有意义的字符。

  • \” 表示”
  • \\ 表示转义字符 \
  • \t 表示一个tab

e) number

同java or c中的number(除八进制、十六进制不能表达)

三、一个复杂json串的的解析

这里使用com.alibaba.fastjson包解析。

package cn.icbc.spy;
import java.util.List; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; class CardInfo{
String prefix;
String cardNum;
String bankId;
String bankName;
String token;
String cardType; public void setPrefix(String prefix) {
this.prefix = prefix;
} public void setCardNum(String cardNum) {
this.cardNum = cardNum;
} public void setBankId(String bankId) {
this.bankId = bankId;
} public void setBankName(String bankName) {
this.bankName = bankName;
} public void setToken(String token) {
this.token = token;
} public void setCardType(String cardType) {
this.cardType = cardType;
}
}
public class Main {
public static void main(String[] args){
String input = "{\"cardList\":[" +
"{\"prefix\":\"141000001\",\"cardNum\":\"622100123456789\"," +
"\"bankId\":\"001\",\"bankName\":\"ICBC\",\"cardType\":\"011\",\"token\":\"\"}," +
"{\"prefix\":\"141000002\",\"cardNum\":\"622100987654321\"," +
"\"bankId\":\"002\",\"bankName\":\"CCB\",\"cardType\":\"001\",\"token\":\"\"}" +
"]}";
JSONObject jsonObject = JSON.parseObject(input);
Object jsonArray = jsonObject.get("cardList");
List<CardInfo> list = JSON.parseArray(jsonArray+"", CardInfo.class);
for(CardInfo cardInfo:list){
System.out.println(cardInfo.prefix);
System.out.println(cardInfo.cardNum);
//...
}
}
}

注意

(1) 使用JSON.parseArray(String arg0, Class arg1)必须包含对象的set方法;

(2) 对象的属性名需与json串中的key名字保持一致;

参考1:www.json.org

感觉这位大神总结的很简洁,在此mark一下:http://blog.csdn.net/hanxujie00/article/details/52050433

更多fastjson使用,帮大家找了一个帖子:

http://xp9802.iteye.com/blog/2123450

转载请注明出处:http://blog.csdn.net/proteen/article/details/78897125

java 替换json字符串中间的引号保留两边的引号,避免json校验失败的更多相关文章

  1. @ResponseBody 返回json字符串的核心类是org.springframework.http.converter.json.MappingJacksonHttpMessageConverter,它使用了Jackson 这个开源的第三方类库。主要是以下两个jar包:jackson-core-asl-1.6.4.jar;jackson-mapper-asl-1.6.4.jar

    @ResponseBody 返回json字符串的核心类是org.springframework.http.converter.json.MappingJacksonHttpMessageConvert ...

  2. JSON字符串-赋张最初接触后台从map转json的方法

    **************************************** json数组: *************************************************** ...

  3. 关于java后台接入百度地图返回参数为{"status":211,"message":"APP SN校验失败"}的解决方法

    1.关于百度地图,天气预报,微信公众平台等一系列权威机构java接入的认识: a.首先要认识到的是这些信息都属于外部接口,我们在进行接入的时候一定要注意到这些接口的参数设置,稍微一不留神就会出现接入失 ...

  4. java替换特殊字符串

    开始想到String.replaceFirst(regex, replacement)和String.replaceAll(regex, replacement); 但特殊字符没替换成功. 用法:St ...

  5. java将JSON字符串转换为实体类对象,基于net.sf.json实现

    @SuppressWarnings("unchecked") public static <T> T jsonToObject(String jsonString, C ...

  6. python json字符串中有int类型数字(不带引号)

    def jsonfy(s:str)->object: obj = eval(s, type('js', (dict,), dict(__getitem__=lambda s, n: n))()) ...

  7. JSON字符串和java对象的互转【json-lib】

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

  8. Json字符串转换为java对象的各种实现方法【json_lib框架、Gson、org.json】

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://mengzhengbin520.blog.51cto.com/7590564/12 ...

  9. Json-lib 进行java与json字符串转换之一

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

随机推荐

  1. Android ProGuard代码混淆技术详解

    前言     受<APP研发录>启发,里面讲到一名Android程序员,在工作一段时间后,会感觉到迷茫,想进阶的话接下去是看Android系统源码呢,还是每天继续做应用,毕竟每天都是画UI ...

  2. php网页跳转无法获取session值

    今日编写项目,需要在跳转后的页面获取session值进行自动登录操作,但是明明在传输页面可以打印出session值,但在接受页面却显示session值为空,经确认脚本中的session_start() ...

  3. 洛谷—— P1069 细胞分裂

    https://www.luogu.org/problem/show?pid=1069#sub 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家.现在,他正在为一个细 ...

  4. POJ 2718 Smallest Difference 枚举

    http://poj.org/problem?id=2718 题目大意: 给你一些数字(单个),不会重复出现且从小到大.他们可以组成两个各个位上的数字均不一样的数,如 0, 1, 2, 4, 6 ,7 ...

  5. PAL相机

    输入时钟:27M PCLK:54M SDRAM时钟:80M ADV7393时钟:27M 1024*768 60帧    65MHZ

  6. 【CS Round #48 (Div. 2 only)】8 Divisible

    [链接]h在这里写链接 [题意] 给你一个长度为n的数字(n<=1000) 然后让你任意组合这个数字. 使得这个数字能被8整除. (不能出现前导0) [题解] 只要后三位能被8整除就可以了. 则 ...

  7. TCP的可靠传输机制(简单好理解:分段与流,滑窗,连接,流量控制,重新发送,堵塞控制)

    TCP的几大模块:分段与流,滑窗,连接,流量控制,重新发送,堵塞控制. 1.checksum:在发送TCP报文的时候,里面的信息可能会因为环境的问题,发送变化,这时,接收信号的时候就需要通过check ...

  8. 开发板 视频1 05_01 05_02 05_03 关于ubuntu的一些操作

    ctrl+alt+T 打开中端 ctrl+d  退出 ctrl+alt+f1 到f6 进入dos中端 ctrl+alt+f7 是退出 05_02 启动root用户   也就是进入 前面出现root了 ...

  9. 介绍array_multisort方法

    介绍array_multisort方法 array_multisort — 对多个数组或多维数组进行排序.其php 手册中的说明如下:  代码如下: bool array_multisort ( ar ...

  10. 【BZOJ 1096】[ZJOI2007]仓库建设

    [链接] 链接 [题意] 在这里输入题意 [题解] 设f[i]表示在第i个地方设立一个仓库,且前面符合要求的最小花费. 则 \(f[i] = min(f[j] + c[i] + dis[i]*(sum ...