java解析json數(shù)組方式
java解析json數(shù)組
最簡單的json數(shù)組
[ ? ? { ? ? ? ? "sisid": 2015111234, ? ? ? ? "sitid": 20001 ? ? }, ? ? { ? ? ? ? "sisid": 2015112312, ? ? ? ? "sitid": 20003 ? ? } ]
其對應(yīng)的內(nèi)容為:
為什么我說這是最簡單的json數(shù)組呢?因?yàn)檫@個json數(shù)組連json對象名都省略了。
如果加上對象名是這樣的:
{ ? ? "msg": [ ? ? ? ? { ? ? ? ? ? ? "sisid": 2015111234, ? ? ? ? ? ? "sitid": 20001 ? ? ? ? }, ? ? ? ? { ? ? ? ? ? ? "sisid": 2015112312, ? ? ? ? ? ? "sitid": 20003 ? ? ? ? } ? ? ] }
我看json數(shù)組結(jié)構(gòu)是這樣看的:最外面一層是一個方括號表示這是一個json數(shù)組,內(nèi)部是連個花括號表示包含兩個json對象(且注意到花括號外面沒有對象名),且這兩個對象分別是這個json數(shù)組的第0項(xiàng)和第1項(xiàng)。
如何解析這個json數(shù)組
//解析json數(shù)組 for (int i = 0; i < json.size(); i++) { JsonObject signin = (JsonObject) json.get(i); JsonElement int_sisid = signin.get("sisid"); JsonElement int_sitid = signin.get("sitid"); //獲取sisid String SISID = String.valueOf(int_sisid); //獲取sitid String SITID = String.valueOf(int_sitid); }
(注:我使用的是Gson的jar包)
for循環(huán)獲取數(shù)組中個每個對象元素JsonObject,再通過get(“屬性名”)獲取這個對象中的所對應(yīng)的元素JsonElement,最后轉(zhuǎn)化為String類型。
java中JSON數(shù)據(jù)的讀取和解析
在做springboot項(xiàng)目時用到了json文件讀取和解析,所以在這里記錄一下學(xué)習(xí)過程中總結(jié)的一些點(diǎn),希望對大家有幫助~
配置fastJson
<!--引入fastjson依賴--> <dependency> ? ? <groupId>com.alibaba</groupId> ? ? <artifactId>fastjson</artifactId> ? ? <version>1.2.35</version> </dependency>
構(gòu)建工具類(方便多次調(diào)用時重復(fù)使用)
public static JSONObject readJsonFile(String filename){ ? ? ? ? String jsonString = ""; ? ? ? ? File jsonFile = new File(filename); ? ? ? ? try { ? ? ? ? ? ? FileReader fileReader = new FileReader(jsonFile); ? ? ? ? ? ? Reader reader = new InputStreamReader(new FileInputStream(jsonFile),"utf-8"); ? ? ? ? ? ? int ch = 0; ? ? ? ? ? ? StringBuffer stringBuffer = new StringBuffer(); ? ? ? ? ? ? while ((ch = reader.read()) != -1){ ? ? ? ? ? ? ? ? stringBuffer.append((char) ch); ? ? ? ? ? ? } ? ? ? ? ? ? fileReader.close(); ? ? ? ? ? ? reader.close(); ? ? ? ? ? ? jsonString = stringBuffer.toString(); ? ? ? ? } catch (FileNotFoundException e){ ? ? ? ? ? ? JSONObject notFoundJson = new JSONObject(); ? ? ? ? ? ? notFoundJson.put("code",Code.GET_ERR); ? ? ? ? ? ? notFoundJson.put("msg","該地區(qū)GeoJson文件不存在!"); ? ? ? ? ? ? return notFoundJson; ? ? ? ? } catch (IOException e) { ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? } ? ? ? ? return JSONObject.parseObject(jsonString); ? ? }
json文件示例(以geojson為例,數(shù)據(jù)結(jié)構(gòu)比較復(fù)雜,只是層次比較多)
{ ? ? "type": "FeatureCollection", ? ? "features": [ ? ? ? ? { ? ? ? ? ? ? "type": "Feature", ? ? ? ? ? ? "properties": { ? ? ? ? ? ? ? ? "adcode": 110101, ? ? ? ? ? ? ? ? "name": "東城區(qū)", ? ? ? ? ? ? ? ? "center": [ ? ? ? ? ? ? ? ? ? ? 116.418757, ? ? ? ? ? ? ? ? ? ? 39.917544 ? ? ? ? ? ? ? ? ], ? ? ? ? ? ? ? ? "centroid": [ ? ? ? ? ? ? ? ? ? ? 116.416739, ? ? ? ? ? ? ? ? ? ? 39.912912 ? ? ? ? ? ? ? ? ], ? ? ? ? ? ? ? ? "childrenNum": 0, ? ? ? ? ? ? ? ? "level": "district", ? ? ? ? ? ? ? ? "acroutes": [ ? ? ? ? ? ? ? ? ? ? 100000, ? ? ? ? ? ? ? ? ? ? 110000 ? ? ? ? ? ? ? ? ], ? ? ? ? ? ? ? ? "parent": { ? ? ? ? ? ? ? ? ? ? "adcode": 110000 ? ? ? ? ? ? ? ? } ? ? ? ? ? ? }, ? ? ? ? ? ? "geometry": { ? ? ? ? ? ? ? ? "type": "MultiPolygon", ? ? ? ? ? ? ? ? "coordinates": [ ? ? ? ? ? ? ? ? ? ? [ ? ? ? ? ? ? ? ? ? ? ? ? [ ? ? ? ? ? ? ? ? ? ? ? ? ? ? [ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 116.387664, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 39.960923 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ], ? ? ? ? ? ? ? ? ? ? ? ? ? ? [ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 116.38948, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 39.961038 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ], ? ? ? ? ? ? ? ? ? ? ? ? ? ? [ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 116.389506, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 39.963147 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ], ? ? ? ? ? ? ? ? ? ? ? ? ? ? [ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 116.396959, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 39.963204 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ] ? ? ? ? ? ? ? ? ? ? ? ? ] ? ? ? ? ? ? ? ? ? ? ] ? ? ? ? ? ? ? ? ] ? ? ? ? ? ? } ? ? ? ? } ? ? ] }
調(diào)用工具類讀取數(shù)據(jù)
String filePath = "文件路徑"; // 讀取json文件 JSONObject jsonObejct = readJsonFile(filePath);
讀取json對象中的"features"字段內(nèi)容,是數(shù)組類型的,采用以下方式:
// 方式一 JSONArray featureArray = JSON.parseArray(jsonObejct.get("features").toString()); // 方式二 JSONArray featureArray = jsonObejct.getJSONArray("features");
讀取對象類型字段
// 方式一 JSONObject propertiesObject = JSONObject.parseObject(regionObject.getString("properties")); // 方式二 JSONObject propertiesObject = jsonObejct.getJSONArray("features").getJSONObject(0).getJSONObject("properties");
讀取字符串類型
// 方式一 String type = jsonObejct.get("type").toString(); // 方式二 String type = jsonObejct.getString("type");
讀取整數(shù)類型
// 方式一 String type = jsonObejct.get("type").toString(); // 方式二 String type = jsonObejct.getString("type");
整體解析
String filePath = "文件地址/文件名.json"; JSONObject jsonObejct = ReadJsonUtils.readJsonFile(filePath); ? // 方式一(很復(fù)雜,語句分開,但是結(jié)構(gòu)清晰) // 讀取json文件的features字段,并轉(zhuǎn)換為json數(shù)組 JSONArray featureArray = JSON.parseArray(jsonObejct.get("features").toString()); // 讀取數(shù)組第一個元素,為地區(qū)對象 JSONObject regionObject = JSONObject.parseObject(featureArray.get(0).toString()); // 讀取地區(qū)對象中的參數(shù)對象 JSONObject propertiesObject = JSONObject.parseObject(regionObject.getString("properties")); // 讀取參數(shù)對象的名稱 String name = propertiesObject.getString("name"); // 讀取參數(shù)對象的地區(qū)代碼 int adcode = propertiesObject.getIntValue("adcode"); // 讀取地區(qū)對象的幾何對象 JSONObject geometryObject = JSONObject.parseObject(regionObject.get("geometry").toString()); // 讀取幾何字段中的坐標(biāo)數(shù)組 JSONArray coordinates = JSONObject.parseArray(geometryObject.get("coordinates").toString()); // 讀取幾何對象中的類型名稱 String type = geometryObject.getString("type"); ? // 方式二(無需每次重新轉(zhuǎn)換類型,一行搞定) String name = jsonObejct.getJSONArray("features").getJSONObject(0).getJSONObject("properties").getString("name"); String type = jsonObejct.getJSONArray("features").getJSONObject(0).getJSONObject("geometry").getString("type"); JSONArray coordinates = jsonObejct.getJSONArray("features").getJSONObject(0).getJSONObject("geometry").getJSONArray("coordinates");
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
mybatis-plus如何配置自定義數(shù)據(jù)類型TypeHandle
這篇文章主要介紹了mybatis-plus如何配置自定義數(shù)據(jù)類型TypeHandle,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01利用Java+OpenCV實(shí)現(xiàn)拍照功能
網(wǎng)上大多是利用C語言或者Python實(shí)現(xiàn)拍照功能,本文將為大家介紹另一種方法,即在Java中調(diào)用OpenCV實(shí)現(xiàn)拍照功能,感興趣的可以了解一下2022-01-01springboot整合mybatis-plus實(shí)現(xiàn)多表分頁查詢的示例代碼
這篇文章主要介紹了springboot整合mybatis-plus實(shí)現(xiàn)多表分頁查詢的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03SpringBoot攔截器與文件上傳實(shí)現(xiàn)方法與源碼分析
其實(shí)spring boot攔截器的配置方式和springMVC差不多,只有一些小的改變需要注意下就ok了。本文主要給大家介紹了關(guān)于如何在Springboot實(shí)現(xiàn)登陸攔截器與文件上傳功能,需要的朋友可以參考下2022-10-10如何在MyBatis中實(shí)現(xiàn)DataSource
今天給大家整理了如何在MyBatis中實(shí)現(xiàn)DataSource,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下2021-06-06