• java 替换json字符串中间的引号保留两边的引号,避免json校验失败


    一、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}

    object

    b) array:values的有序集合。

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

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

    array

    c) value取值

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

    value

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

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

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

    string

    e) number

    同java or c中的number(除八进制、十六进制不能表达)
    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

  • 相关阅读:
    图像处理之霍夫变换(直线检測算法)
    Linux makefile 教程 很具体,且易懂
    POJ 2001 Shortest Prefixes(字典树)
    android performClick使用
    Java工厂模式
    C#异步调用
    答读者问(5):有关数学对程序猿的作用、研发工作岗位要求和实习对找工作的影响等问题
    Android系统源码导入到eclipse
    开源项目与许可证
    Java实现第十届蓝桥杯矩形切割
  • 原文地址:https://www.cnblogs.com/jpfss/p/9968933.html
Copyright © 2020-2023  润新知