摘要:該篇主要以代碼示例為主,因?yàn)樯喜蝗?,看不到這個(gè)官方文檔和。因?yàn)榻酉聛淼牡讓幽J(rèn)使用的就是。和功能是一致的。區(qū)別是不會(huì)拋出異常,而會(huì)拋出異常。而解析輸入的文本內(nèi)容依據(jù)默認(rèn)的解析文本的模式。
Json-smart
該篇主要以代碼示例為主,因?yàn)間oogle上不去,看不到Json-smart這個(gè)官方文檔和API。故只例舉一些代碼示例。因?yàn)榻酉聛淼腏son-path底層默認(rèn)使用的就是JsonSmart。JsonSmart的源碼并不多,有興趣可以去看看
解析簡單json格式的字符串import net.minidev.json.JSONArray; import net.minidev.json.JSONObject; import net.minidev.json.JSONValue; public class ParseJsonString { public static void main(String[] args) { /** ** [ * 0, * { * "1": { * "2": { * "3": { * "4": [ * 5, * { * "6": 7 * } * ] * } * } * } * } * ] ** */ String str="[0,{"1":{"2":{"3":{"4":[5,{"6":7}]}}}}]"; if (JSONValue.isValidJson(str)) { //判斷是否是合法的json字符串 Object obj=JSONValue.parse(str); JSONArray array=(JSONArray)obj; System.out.println(array.size()); System.out.println(array); JSONObject jsonObject = (JSONObject) array.get(1); System.out.println(jsonObject); JSONObject jsonObject1 = (JSONObject) jsonObject.get("1"); System.out.println(jsonObject1.toJSONString()); JSONObject jsonObject2 = (JSONObject) jsonObject1.get("2"); System.out.println(jsonObject2.toJSONString()); JSONObject jsonObject3 = (JSONObject) jsonObject2.get("3"); System.out.println(jsonObject3.toJSONString()); JSONArray array2 = (JSONArray) jsonObject3.get("4"); System.out.println(array2); JSONObject jsonObject4 = (JSONObject) array2.get(1); System.out.println(jsonObject4.toJSONString()); int data = Integer.parseInt(jsonObject4.get("6").toString()); System.out.println(data); } } }
輸出:
2 [0,{"1":{"2":{"3":{"4":[5,{"6":7}]}}}}] {"1":{"2":{"3":{"4":[5,{"6":7}]}}}} {"2":{"3":{"4":[5,{"6":7}]}}} {"3":{"4":[5,{"6":7}]}} {"4":[5,{"6":7}]} [5,{"6":7}] {"6":7} 7JSONValue的使用
import java.io.IOException; import java.util.HashMap; import java.util.Map; import net.minidev.json.JSONObject; import net.minidev.json.JSONStyle; import net.minidev.json.JSONValue; import net.minidev.json.parser.ParseException; public class JsonValueTest { public static void main(String[] args) throws ParseException, IOException { // public class JSONObject extends HashMap// implements JSONAware, JSONAwareEx, JSONStreamAwareEx {} JSONObject obj = new JSONObject(); obj.put("name", "foo"); obj.put("num", 100); obj.put("balance", 1000.21); obj.put("is_vip", true); obj.put("is_special_fuhao", """); obj.put("nickname", null); // 判斷是否是合法的json串 System.out.println(JSONValue.isValidJson(obj.toJSONString())); // 轉(zhuǎn)義 quotes, , /, , , , f, and other control characters (U+0000 through U+001F). System.out.println(JSONValue.escape(obj.toJSONString())); System.out.println(obj.toJSONString()); System.out.println(JSONValue.toJSONString(obj)); // JSONStyle object configure JSonSerializer reducing output size System.out.println(obj.toJSONString(JSONStyle.NO_COMPRESS)); System.out.println(obj.toJSONString(JSONStyle.MAX_COMPRESS)); System.out.println(JSONValue.toJSONString(obj, JSONStyle.MAX_COMPRESS)); System.out.println(JSONValue.compress(obj.toJSONString())); System.out.println(JSONValue.uncompress(obj.toJSONString())); System.out.println(JSONValue.uncompress(JSONValue.toJSONString(obj, JSONStyle.MAX_COMPRESS))); // Parse Json input to a java Object keeping element order System.out.println(JSONValue.parseKeepingOrder(obj.toJSONString())); // 解析字符串的時(shí)候會(huì)拋異常 throw ParseException System.out.println(JSONValue.parseWithException(obj.toJSONString())); System.out.println("**********************************"); String str="{"key":"Value"}"; Object obj1=JSONValue.parse(str); System.out.println(obj1); obj1=JSONValue.parseStrict(str); System.out.println(obj1); JSONObject obj2=(JSONObject)obj1; System.out.println(obj2.get("key")); System.out.println("**********************************"); StringBuffer strBuffer = new StringBuffer("zhangsan"); Map map = new HashMap (); map.put("hello", "world"); map.put("hello1", "world1"); map.put("hello2", "world2"); JSONValue.writeJSONString(map, strBuffer, JSONStyle.NO_COMPRESS); // JSONValue.writeJSONString(map, strBuffer, JSONStyle.MAX_COMPRESS); // 如果設(shè)置JSONStyle.MAX_COMPRESS,那么strBuffer輸出: zhangsan{hello:world,hello2:world2,hello1:world1} System.out.println(strBuffer); } }
輸出:
true {"balance":1000.21,"num":100,"nickname":null,"is_vip":true,"name":"foo","is_special_fuhao":"""} {"balance":1000.21,"num":100,"nickname":null,"is_vip":true,"name":"foo","is_special_fuhao":"""} {"balance":1000.21,"num":100,"nickname":null,"is_vip":true,"name":"foo","is_special_fuhao":"""} {"balance":1000.21,"num":100,"nickname":null,"is_vip":true,"name":"foo","is_special_fuhao":"""} {balance:1000.21,num:100,is_vip:true,name:foo,is_special_fuhao:"""} {balance:1000.21,num:100,is_vip:true,name:foo,is_special_fuhao:"""} {balance:1000.21,num:100,nickname:null,is_vip:true,name:foo,is_special_fuhao:"""} {"balance":1000.21,"num":100,"nickname":null,"is_vip":true,"name":"foo","is_special_fuhao":"""} {"balance":1000.21,"num":100,"is_vip":true,"name":"foo","is_special_fuhao":"""} {balance=1000.21, num=100, nickname=null, is_vip=true, name=foo, is_special_fuhao="} {"balance":1000.21,"num":100,"is_vip":true,"nickname":null,"name":"foo","is_special_fuhao":"""} ********************************** {"key":"Value"} {"key":"Value"} Value ********************************** zhangsan{"hello":"world","hello2":"world2","hello1":"world1"}
JSONValue中所有的parse方法內(nèi)部都是調(diào)用JSONParser實(shí)現(xiàn)的parse的方法。
JSONValue.parse() 和 JSONValue.parseStrict() 功能是一致的。區(qū)別是JSONValue.parse()不會(huì)拋出異常,而JSONValue.parseStrict()會(huì)拋出ParseException異常。
JSONValue.parseStrict()和JSONValue.parseWithException() 都會(huì)拋出ParseException異常,單從輸出結(jié)果看二者是一樣的,區(qū)別是JSONValue.parseStrict()的解析輸入的json文本的有效性是依據(jù)RFC4627。而JSONValue.parseWithException()解析輸入的json文本內(nèi)容依據(jù)默認(rèn)的解析文本的模式。
JsonValue的remapField方法以及對于編碼轉(zhuǎn)換import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.StringReader; import net.minidev.json.JSONObject; import net.minidev.json.JSONValue; import net.minidev.json.writer.JsonReader; public class JsonReaderTest { static String[] nonLatinTexts = new String[] { "????? ?????", "日本語", "Русский", "?????", "???", "???????", "??????", "?????", "中文", "????", "??????", "??????", "?????????" }; public static void main(String[] args) throws IOException { String text = "{"new":"foo","default":"bar"}"; JSONValue.remapField(TRen.class, "default", "default_"); JSONValue.remapField(TRen.class, "new", "new_"); TRen t = JSONValue.parse(text, TRen.class); System.out.println(JSONValue.toJSONString(t)); System.out.println("*******************************"); for (String nonLatinText : nonLatinTexts) { String s = "{"key":"" + nonLatinText + ""}"; // 1. StringReader reader = new StringReader(s); // JSONObject obj = (JSONObject) JSONValue.parse(reader); // 2. ByteArrayInputStream bis = new ByteArrayInputStream(s.getBytes("utf8")); // JSONObject obj = (JSONObject) JSONValue.parse(bis); // 3. byte[] bs = s.getBytes("utf8"); // JSONObject obj = (JSONObject) JSONValue.parse(bs); JSONObject obj = (JSONObject) JSONValue.parse(s); String v = (String) obj.get("key"); // result is incorrect System.out.print(v + ", "); } System.out.println(); } public static class TRen { public String new_; public String default_; } }
輸出
{"default":"bar","new":"foo"} ******************************* ????? ?????, 日本語, Русский, ?????, ???, ???????, ??????, ?????, 中文, ????, ??????, ??????, ?????????,Json轉(zhuǎn)Object示例
import java.util.ArrayList; import java.util.List; import net.minidev.json.JSONArray; import net.minidev.json.JSONObject; import net.minidev.json.JSONValue; public class JsonToObject { public static void main(String[] args) { People people = new People(); people.setName("test1"); people.setAge(13); people.setMobile(20130808); People people1 = new People(); people1.setName("test"); people1.setAge(123); people1.setMobile(888666); Listarray = new ArrayList (); array.add(people); array.add(people1); JSONObject obj = new JSONObject(); obj.put("peoples", array); System.out.println(JSONValue.toJSONString(obj)); JSONArray jsonArray = new JSONArray(); jsonArray.add(people); jsonArray.add(people1); JSONObject result = new JSONObject(); result.put("peoples", jsonArray); System.out.println(JSONValue.toJSONString(result)); } } class People { public String name; public int age; public boolean single; public long mobile; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean isSingle() { return single; } public void setSingle(boolean single) { this.single = single; } public long getMobile() { return mobile; } public void setMobile(long mobile) { this.mobile = mobile; } }
輸出:
{"peoples":[{"single":false,"age":13,"name":"test1","mobile":20130808},{"single":false,"age":123,"name":"test","mobile":888666}]} {"peoples":[{"single":false,"age":13,"name":"test1","mobile":20130808},{"single":false,"age":123,"name":"test","mobile":888666}]}
參考文檔:
Json-smart在gitHub上的代碼
JsonSmart文檔
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64570.html
摘要:簡介是用于結(jié)構(gòu)化數(shù)據(jù)序列化的一種文本格式,包含種基礎(chǔ)類型字符串,數(shù)字,布爾和和兩種結(jié)構(gòu)類型對象和數(shù)組。對象是一個(gè)由零或者多個(gè)名值對組成的無序集合,其中名值對中名是字符串類型,值則可以是字符串,數(shù)字,布爾,,對象或數(shù)組類型。 Json JavaScript Object Notation (JSON)是一個(gè)輕量級的,基于文本的,跨語言的數(shù)據(jù)交換格式。它從ECMAScript編程語言標(biāo)準(zhǔn)(...
pygame作為python的一個(gè)平臺庫,在做游戲的時(shí)候,需要學(xué)習(xí)的內(nèi)容還是比較的多的,主要涉及到的內(nèi)容有相關(guān)的學(xué)習(xí)筆記,包括怎么設(shè)置字體,另外還有就是怎么設(shè)置其顯示中文呢?下面就給大家詳細(xì)解答下。 一、獲得可用字體 importpygame print(pygame.font.get_fonts()) 結(jié)果: ['arial','arialblack...
游戲界面,國外的一些游戲,還是以英文為主,那么,國內(nèi)的游戲,大多覆蓋的是中文字體。那么,我們怎么樣將英文字體修改成為中文,并且能夠正確的顯示出來呢?下面就給大家詳細(xì)解答下。 一、獲得可用字體 importpygame print(pygame.font.get_fonts()) 結(jié)果: ['arial','arialblack','bahns...
項(xiàng)目簡介Khoj是一個(gè)開源的、個(gè)人化的AI助手,旨在充當(dāng)你的第二大腦。它能夠幫助你回答任何問題,不論這些問題是在線上的還是在你自己的筆記中。Khoi 支持使用在線AI模型(例如 GPT-4)或私有、本地的語言模型(例如 Llama3)。你可以選擇自托管 Khoj,也可以使用官方提供的云實(shí)例。在線問題:如果你有一個(gè)問題需要從互聯(lián)網(wǎng)獲取最新的信息,Khoj可以進(jìn)行在線搜索,找到相關(guān)答案。例如,查詢當(dāng)前...
一,效果圖。二,代碼。DOCTYPEhtml><html><head><metacharset="utf-8"><title>CSSAligntitle><style>body{margin:0;padding:0;} .container{position:relative;width:100%;} ...
閱讀 2086·2023-04-25 19:03
閱讀 1238·2021-10-14 09:42
閱讀 3419·2021-09-22 15:16
閱讀 1003·2021-09-10 10:51
閱讀 1586·2021-09-06 15:00
閱讀 2412·2019-08-30 15:55
閱讀 492·2019-08-29 16:22
閱讀 901·2019-08-26 13:49