java中解析一個json串,本文詳細介紹了安卓原生的解析以及用fastjson解析
在java或安卓中解析JSON有很多種方式,可以用谷歌給安卓提供的原生的解析方式解析安卓,也可以選擇第三方類庫,一些比較流行的解析方式如fastjson,Gson等,本文就簡單介紹一下java工程中fastjson解析json資料。在介紹fastjson解析之前,我想先給大家用谷歌給安卓提供的原生解析方式解析一個JSON資料串。
(一)google原生的解析方式:
用原生的解析方式需要用到一些google提供的類庫,在你的工程下新建一個org.json包,然後可以從https://github.com/stleary/JSON-java下載其提供的java解析JSON的類庫
然後把這些下載好的類複製到org.json包下,如下圖:
給出json串如下:
{"firstName":"John","lastName":"Smith","address":{"streetAddress":"奧運村西", "city":"北京","postalCode":"100019","state":"北京"}, "phoneNumber":[{"number":" 10086","type":"home"},{"number":" 10010","type":"fax"}],"sex":"male","age":25}{...}裡面的是一個JSONObject,而[...]是一個JSONArray
由JSON字串我們可以定義出實體類如下:
public classUser { private String firstName; private String lastName; private String sex; private int age; private Address address; private List<Phone> phoneNumber; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public List<Phone> getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(List<Phone> phoneNumber) { this.phoneNumber = phoneNumber; } }
public class Address { private String streetAddress; private String city; private String state; private String postalCode; public String getStreetAddress() { return streetAddress; } public void setStreetAddress(String streetAddress) { this.streetAddress = streetAddress; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getState() { return state; } public void setState(String state) { this.state = state; } public String getPostalCode() { return postalCode; } public void setPostalCode(String postalCode) { this.postalCode = postalCode; } }
public class Phone { private String type; private String number; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } }將json字串解析到實體類裡面
public class TestJson02 { public static void main(String[] args) { String str = "{\"firstName\":\"John\",\"lastName\":\"Smith\",\"address\":{\"streetAddress\":\"奧運村西\",\"city\":\"北京\",\"postalCode\":\"100019\",\"state\":\"北京\"},\"phoneNumber\":[{\"number\":\" 10086\",\"type\":\"home\"},{\"number\":\" 10010\",\"type\":\"fax\"}],\"sex\":\"male\",\"age\":25}\n"; User user = parserUser(str); System.out.println(toJSONString(user)); } private static String toJSONString(User user) { JSONObject userObj = new JSONObject(); userObj.put("firstName", user.getFirstName()); userObj.put("lastName", user.getLastName()); userObj.put("sex", user.getSex()); userObj.put("age", user.getAge()); JSONObject addressObj = new JSONObject(); Address address = user.getAddress(); addressObj.put("streetAddress", address.getStreetAddress()); addressObj.put("city", address.getCity()); addressObj.put("state", address.getState()); addressObj.put("postalCode", address.getPostalCode()); userObj.put("address", addressObj); JSONArray phoneNumber = new JSONArray(); List<Phone> phones = user.getPhoneNumber(); for (Phone phone : phones) { JSONObject number = new JSONObject(); number.put("type", phone.getType()); number.put("number", phone.getNumber()); phoneNumber.put(number); } userObj.put("phoneNumber", phoneNumber); return userObj.toString(); } private static User parserUser(String str) { JSONObject object = new JSONObject(str); User user = new User(); user.setFirstName(object.optString("firstName")); user.setLastName(object.optString("lastName")); user.setSex(object.optString("sex")); user.setAge(object.optInt("age")); JSONObject addressObj = object.optJSONObject("address"); Address address = new Address(); address.setStreetAddress(addressObj.optString("streetAddress")); address.setCity(addressObj.optString("city")); address.setState(addressObj.optString("state")); address.setPostalCode(addressObj.optString("postalCode")); user.setAddress(address); List<Phone> phones = new ArrayList<>(); JSONArray phoneNumber = object.optJSONArray("phoneNumber"); for (int i = 0; i < phoneNumber.length(); i++) { JSONObject numberObj = phoneNumber.optJSONObject(i); Phone phone = new Phone(); phone.setType(numberObj.optString("type")); phone.setNumber(numberObj.optString("number")); phones.add(phone); } user.setPhoneNumber(phones); return user; } }(二)用fastjson去解析一個json字串
用fastjson解析json字串需要先匯入jar包,在這裡我推薦用maven去匯入包,這樣有一個好處,就是可以匯入其依賴的相關jar包。
實體類如下圖:
public class User { @JSONField(name = "firstName")//注意,屬性加入此註解,則在java檔案混淆後依然可以得到這個屬性 private String firstName; private String lastName; private String sex; private int age; @JSONField(serialize = false)//此註解可以使序列化後的json字串中沒有這個屬性 private Address address; private List<Phone> phoneNumber; @JSONField(name = "10000") private String text; private int x; private int y; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public List<Phone> getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(List<Phone> phoneNumber) { this.phoneNumber = phoneNumber; } public String getText() { return text; } public void setText(String text) { this.text = text; } @JSONField(name = "location") public void setLocation(List<Integer> location) { x = location.get(0); y = location.get(1); } public int getX() { return x; } public int getY() { return y; } }
public class Address { private String streetAddress; private String city; private String state; private String postalCode; public String getStreetAddress() { return streetAddress; } public void setStreetAddress(String streetAddress) { this.streetAddress = streetAddress; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getState() { return state; } public void setState(String state) { this.state = state; } public String getPostalCode() { return postalCode; } public void setPostalCode(String postalCode) { this.postalCode = postalCode; } }
public class Phone { private String type; private String number; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } }解析方式如下程式碼:
public class Test { public static void main(String[] args) { String src = "{\n" + " \"firstName\": \"John\",\n" + " \"10000\": \"一萬\",\n" + " \"location\": [50, 100],\n" + " \"lastName\": \"Smith\",\n" + " \"sex\": \"male\",\n" + " \"age\": 25,\n" + " \"address\": \n" + " {\n" + " \"streetAddress\": \"21 2nd Street\",\n" + " \"city\": \"New York\",\n" + " \"state\": \"NY\",\n" + " \"postalCode\": \"10021\"\n" + " },\n" + " \"phoneNumber\": \n" + " [\n" + " {\n" + " \"type\": \"home\",\n" + " \"number\": \"212 555-1234\"\n" + " },\n" + " {\n" + " \"type\": \"fax\",\n" + " \"number\": \"646 555-4567\"\n" + " }\n" + " ]\n" + " }"; // Map parse = (Map) JSON.parse(src); // System.out.println(((Map) parse.get("address")).get("streetAddress")); // System.out.println(((Map) ((List) parse.get("phoneNumber")).get(0)).get("type")); User user = JSON.parseObject(src, User.class); System.out.println(user.getFirstName()); // System.out.println(user.getText()); // System.out.println(user.getX()); // System.out.println(user.getY()); System.out.println(JSON.toJSONString(user)); // List<Integer> list = JSON.parseArray("[100, 40, 12, 452]", Integer.class); // System.out.println(user.getAddress().getCity()); // System.out.println(user.getPhoneNumber().get(0).getNumber()); } }
相關推薦
java中解析一個json串,本文詳細介紹了安卓原生的解析以及用fastjson解析
在java或安卓中解析JSON有很多種方式,可以用谷歌給安卓提供的原生的解析方式解析安卓,也可以選擇第三方類庫,一些比較流行的解析方式如fastjson,Gson等,本文就簡單介紹一下java工程中fastjson解析json資料。在介紹fastjson解析之前,我想先給大
Java中輸入一個十進位制數,如何轉換為二進位制數
方法一:利用Java API直接轉換 十進位制數如何轉換為二進位制數,這在Java API 中有一個方法,Integer.toBinaryString( ) 括號裡面寫上你要轉換的十進位制數,這樣可以直接轉換。例如: public static void
vc程式設計中遇到一個編譯問題,原來是少了LIB檔案 (ZT)
摘自網路,感覺挺實用的,基於VC,例如VC6.0等等 (1) vc網路程式設計中遇到一個編譯問題,原來是少了WSOCK32.LIB。在 project-->settings-->Link-->Object/Library modules 中加入庫WSO
java高併發系列 - 第22天:java中底層工具類Unsafe,高手必須要了解
這是java高併發系列第22篇文章,文章基於jdk1.8環境。 本文主要內容 基本介紹 通過反射獲取Unsafe例項 Unsafe中的CAS操作 Unsafe中原子操作相關方法介紹 Unsafe中執行緒排程相關方法 park和unpark示例 Unsafe鎖示例 Unsafe中保證變數的可見性 Unsafe
java中輸出一個字符串裏面的空格,字母還有數字的數目舉例說明
clas 視頻下載 stat int 結果 art except nta tof 9.3 輸出一個字符串裏面的空格,字母還有數字的數目。 (視頻下載) (全部書籍) public class Test { public static void main
RapidJson(V1.1.0)的Value簡單操作(拼接json串,存取檔案中的json,解析json串)
#include <rapidjson/document.h> #include <rapidjson/stringbuffer.h> #include <rapidjson/pointer.h> #include <rapidjson/writer.h
Java——在一個字串中查詢一個子串,計算出來這個子串在字串中出現的次數。
引入包:import java.util.Scanner;main函式:public static void main(String[] args){Scanner s = new Scanner(Sy
Java中使用org.json和json-lib解析JSON
contents load user cti clas and arraylist 源碼 fur 文章目錄 [隱藏] 一。JavaProject中org.json解析JSON 1.JSON的org.son-api下載 1)JSON網址2
輸入一個子串和一個整串,求該子串在整個字串中出現的次數
編寫應用程式,輸入一個子串和一個整串,求該子串在整個字串中出現的次數 import java.util.*; public class Tetso5 { public static void main(String[] args) { // TODO Auto-generated
Java中傳入一個時間段,取出該時間段內所有日期的集合
package com.yhsb.assisData.controller; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.u
java中Iterable介面的使用,實現一個單鏈表的迭代器
單鏈表實現: public class MyLinkedList <T>{ private static class Entry<E>{ private E value; private Entry next;
【Java】給定一個字串str,和一個字母ch,請實現相應的程式碼求出一個數組,使陣列中每個數字表示該位置與字母ch之間的最短距離。 比如str=”lexinfintech” ch=”i” 則輸出為:[3,2,1,0,1,1,0,1,2,3,4,5]
import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * @author: ycz * @date: 2018/12/17 0017 16:43 * @description: */ p
解析json串,並按照某個欄位排序
本文將為大家介紹json解析並按照某個欄位排序的方法。如果是漢字,轉化為漢語拼音後,按照字典順序排序。 原始json [{"proportionCost":0,"busiName":"aaav","userList":"李雷","allCost":53800,"liuCos
java中list裡面存放map,根據map中的某一個欄位進行排序
Java中list裡面存放map,根據map中的某一個欄位進行排序 例如: package com; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; impor
從kafka獲取資料,並解析為json格式,寫入到mysql中
專案需求:將kafka解析來的日誌獲取到資料庫的變更記錄,按照訂單的級別和訂單明細級別寫入資料庫,一條訂單的所有資訊包括各種維度資訊均儲存在一條json中,寫入mysql5.7中。 配置資訊: [Global] kafka_server=xxxxxxxxxxx:9092 kafka_to
leetcode-java.T005_LongestPalindromicSubstringTotal 給定一個字串S,找出它的最大的迴文子串
敬請關注部落格,後期不斷更新優質博文,謝謝 每天j堅持刷leetcode----找出最大的迴文字串 package leetcode.T005_LongestPalindromicSubstringTotal; /** * @author 周志祥 E-mai
Java中輸入一個整數,反向輸出這個整數
java反向輸入整數的位數可以採用取餘判斷的方式,示例如下: import java.util.Scanner; public class Dd { public static void
【soapUI】解決post請求時,body為json串,伺服器無法解析問題
背景:傳送post請求,且body為json串時,response響應值總是提示“XX欄位值不能為空”,採用Postman、jmeter工具嘗試,結果都是如此,但Postman、jme
java中判斷一個字串是否包含另外一個字串,如果包含,計算出字串的開始位置
對於一個給定的source字串和一個target字串,你應該在source字串中找出target出現的第一個位置(從0開始) 程式碼如下: int h = 0;
【小家java】Java中二進位制與位運算(“^,&,>>,>>>”),使用移位演算法寫一個流水號生成器(訂單號生成器)
相關閱讀 每篇一句 高樓大廈,都是平地起的。 整個java體系,其實就是一本祕籍,那就是:java基礎! (基礎如果打的紮實,在實際開發工作中會帶來極大的助益) 二進位制 二進位制是計算技術中廣泛採用的一種數制。二進位制資料是用0和1兩個數碼來表示的