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字符

在此,要注意某些特殊的字符,需經過“\”進行轉義,這些特殊字符與轉義字符共同表示一個有意義的字符。

  • \” 表示”
  • \\ 表示轉義字符 \
  • \t 表示一個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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM