[英]Read from JSON file and map the objects
因此,我有這個巨大的JSON文件,我需要從中提取數據。 JSON格式如下所示:
{
"enabled":true,
"contentMetadataPartial":
{
"customTags":
{
"tag1":"value1"
}
},
"simulatedChanges":
[
3000,
2500,
400
],
"simulatedUpdateMetadata":
[
{
"customTags":
{
"tag1":"value1",
},
"assetName":"asset1234",
},
{
"duration":1111,
"encodedRate":3333,
}
]
}
為了閱讀它,我試圖創建一個類來映射鍵和對象。 類似這樣的東西,類似於這個問題:
public class ConfigData
{
private Boolean enabled;
private class ContentMetadataPartial
{
private class CustomTags
{
String tag1;
}
}
int[] simulatedChanges = new int[3];
//problem here
}
但是我陷入了數組,該數組包含更多對象,而不僅僅是簡單的基本數據類型。
JSON文件很大,並且整個項目都有相似的類型。 我對此很陌生,可能會犯一些錯誤。 任何朝着正確方向的幫助將不勝感激。 謝謝!
您需要一個類結構,而不是一個一個:
ConfigData:
package com.example.gson;
import java.util.List;
public class ConfigData {
private Boolean enabled;
private ContentMetadataPartial contentMetadataPartial;
private List<Integer> simulatedChanges = null;
private List<SimulatedUpdateMetadatum> simulatedUpdateMetadata = null;
public Boolean getEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
public ContentMetadataPartial getContentMetadataPartial() {
return contentMetadataPartial;
}
public void setContentMetadataPartial(ContentMetadataPartial contentMetadataPartial) {
this.contentMetadataPartial = contentMetadataPartial;
}
public List<Integer> getSimulatedChanges() {
return simulatedChanges;
}
public void setSimulatedChanges(List<Integer> simulatedChanges) {
this.simulatedChanges = simulatedChanges;
}
public List<SimulatedUpdateMetadatum> getSimulatedUpdateMetadata() {
return simulatedUpdateMetadata;
}
public void setSimulatedUpdateMetadata(List<SimulatedUpdateMetadatum> simulatedUpdateMetadata) {
this.simulatedUpdateMetadata = simulatedUpdateMetadata;
}
@Override
public String toString() {
return "ConfigData [enabled=" + enabled + ", contentMetadataPartial=" + contentMetadataPartial
+ ", simulatedChanges=" + simulatedChanges + ", simulatedUpdateMetadata=" + simulatedUpdateMetadata
+ "]";
}
}
ContentMetadataPartial:
package com.example.gson;
public class ContentMetadataPartial {
private CustomTags customTags;
public CustomTags getCustomTags() {
return customTags;
}
public void setCustomTags(CustomTags customTags) {
this.customTags = customTags;
}
}
CustomTags:
package com.example.gson;
public class CustomTags {
private String tag1;
public String getTag1() {
return tag1;
}
public void setTag1(String tag1) {
this.tag1 = tag1;
}
}
SimulatedUpdateMetadatum:
package com.example.gson;
public class SimulatedUpdateMetadatum {
private CustomTags customTags;
private String assetName;
private Integer duration;
private Integer encodedRate;
public CustomTags getCustomTags() {
return customTags;
}
public void setCustomTags(CustomTags customTags) {
this.customTags = customTags;
}
public String getAssetName() {
return assetName;
}
public void setAssetName(String assetName) {
this.assetName = assetName;
}
public Integer getDuration() {
return duration;
}
public void setDuration(Integer duration) {
this.duration = duration;
}
public Integer getEncodedRate() {
return encodedRate;
}
public void setEncodedRate(Integer encodedRate) {
this.encodedRate = encodedRate;
}
}
GsonMain:
package com.example.gson;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import com.example.gson.ConfigData;
import com.google.gson.Gson;
public class GsonMain {
private static final String jsonFile = "files/input.json";
public static void main(String[] args) {
String content = readFile(jsonFile);
ConfigData conf = new Gson().fromJson(content, ConfigData.class);
System.out.println(conf);
}
private static String readFile(String filename) {
BufferedReader br = null;
FileReader fr = null;
StringBuilder content = new StringBuilder();
try {
fr = new FileReader(filename);
br = new BufferedReader(fr);
String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null) {
content.append(sCurrentLine);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
if (fr != null)
fr.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
return content.toString();
}
}
而且您的Json格式良好:
{
"enabled":true,
"contentMetadataPartial":
{
"customTags":
{
"tag1":"value1"
}
},
"simulatedChanges":
[
3000,
2500,
400
],
"simulatedUpdateMetadata":
[
{
"customTags":
{
"tag1":"value1"
},
"assetName":"asset1234"
},
{
"duration":1111,
"encodedRate":3333
}
]
}
我已使用此Web生成類。
package com.webom.practice;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class Sample {
public static Map<String, Object> jsonToMap(JSONObject json) throws JSONException {
Map<String, Object> retMap = new HashMap<String, Object>();
if(json != JSONObject.NULL) {
retMap = toMap(json);
}
return retMap;
}
public static Map<String, Object> toMap(JSONObject object) throws JSONException {
Map<String, Object> map = new HashMap<String, Object>();
Iterator<String> keysItr = object.keys();
while(keysItr.hasNext()) {
String key = keysItr.next();
Object value = object.get(key);
if(value instanceof JSONArray) {
value = toList((JSONArray) value);
}
else if(value instanceof JSONObject) {
value = toMap((JSONObject) value);
}
map.put(key, value);
}
return map;
}
public static List<Object> toList(JSONArray array) throws JSONException {
List<Object> list = new ArrayList<Object>();
for(int i = 0; i < array.length(); i++) {
Object value = array.get(i);
if(value instanceof JSONArray) {
value = toList((JSONArray) value);
}
else if(value instanceof JSONObject) {
value = toMap((JSONObject) value);
}
list.add(value);
}
return list;
}
public static void main(String[]args) {
String Jsondata="{\r\n" +
" \"enabled\":true,\r\n" +
" \"contentMetadataPartial\":\r\n" +
" {\r\n" +
" \"customTags\":\r\n" +
" {\r\n" +
" \"tag1\":\"value1\"\r\n" +
" }\r\n" +
" },\r\n" +
" \"simulatedChanges\":\r\n" +
" [\r\n" +
" 3000,\r\n" +
" 2500,\r\n" +
" 400\r\n" +
" ],\r\n" +
" \"simulatedUpdateMetadata\":\r\n" +
" [\r\n" +
" {\r\n" +
" \"customTags\":\r\n" +
" {\r\n" +
" \"tag1\":\"value1\",\r\n" +
" },\r\n" +
" \"assetName\":\"asset1234\",\r\n" +
" },\r\n" +
" {\r\n" +
" \"duration\":1111,\r\n" +
" \"encodedRate\":3333,\r\n" +
" }\r\n" +
" ]\r\n" +
"}\r\n" ;
JSONObject json = new JSONObject(Jsondata);
System.out.println(json);
Map<String,Object> dataConversion=Sample.jsonToMap(json);
System.out.println(dataConversion);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.