[英]gson parsing nested json objects
我試圖將json字符串解析為java對象。 目前代碼是手動讀取文件並生成java對象。 但是,我希望將實現帶到gson。
這是我從Web服務調用收到的json:
{ "comment": [
"This file is used to define the behavior for the elements parsed.",
"Each entry in the file will have the format of element:name, skip:bool",
"If SkipFlag is true, it means that element need not be processed.",
"Convention used for elements and rule names is camelCase"
],
"rules": [ { "element": "html", "skip": true },
{ "element": "head", "skip": true },
{ "element": "head", "skip": true },
{ "element": "body", "skip": true }
]
}
我需要忽略評論和轉換規則。 這是我試圖為規則java對象定義的java類型:
// Arraylist < Map < elementname, Map < name, value > > >
ArrayList< Map<String, Map<String, String> > > rules;
使用gson有一種簡單的方法嗎?
用這個
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.enableComplexMapKeySerialization().create();
Type type = new TypeToken<ArrayList< Map<String, ArrayList<Map<String, String> > > >>() {}.getType();
ArrayList< Map<String, ArrayList<Map<String, String> > > > obj = gson.fromJson(str, type);
您可以聲明特定的類:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import com.google.gson.Gson;
class Rule {
String element;
boolean skip;
}
class ElementParser {
String[] comment;
Rule[] rules;
}
public class JSonDecoder {
public static void main( String[] args ) throws IOException {
try( BufferedReader reader =
new BufferedReader( new FileReader( "Skip.json" ))) {
System.out.println(
new Gson().fromJson( reader, ElementParser.class ).toString());
}
}
}
這是長版:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import com.google.gson.Gson;
class Rule {
String element;
boolean skip;
@Override public String toString() {
StringBuilder sb = new StringBuilder();
sb.append( '\t' );
sb.append( element );
sb.append( " ==> " );
sb.append( skip );
sb.append( '\n' );
return sb.toString();
}
}
class ElementParser {
String[] comment;
Rule[] rules;
@Override public String toString() {
StringBuilder sb = new StringBuilder();
sb.append( "Comment:\n" );
for( String c : comment ) {
sb.append( '\t' );
sb.append( c );
sb.append( '\n' );
}
sb.append( "Rules:\n" );
for( Rule r : rules ) {
sb.append( r.toString());
}
return sb.toString();
}
}
public class JSonDecoder {
public static void main( String[] args ) throws IOException {
try( BufferedReader reader = new BufferedReader( new FileReader( "Skip.json" ))) {
System.out.println(
new Gson().fromJson( reader, ElementParser.class ).toString());
}
}
}
結果:
Comment:
This file is used to define the behavior for the elements parsed.
Each entry in the file will have the format of element:name, skip:bool
If SkipFlag is true, it means that element need not be processed.
Convention used for elements and rule names is camelCase
Rules:
html ==> true
head ==> true
head ==> true
body ==> true
你也可以嘗試一下..
用於保存規則和注釋的Data類
import java.util.List;
public class Data {
private List<String> comments;
private List<Rule> rules;
public Data() {}
public List<String> getComments() {
return comments;
}
public void setComments(List<String> comments) {
this.comments = comments;
}
public List<Rule> getRules() {
return rules;
}
public void setRules(List<Rule> rules) {
this.rules = rules;
}
}
用於保持元素和跳過公共類Rule的Rule類
private String element;
private boolean skip;
public Rule() {}
public String getElement() {
return element;
}
public void setElement(String element) {
this.element = element;
}
public boolean isSkip() {
return skip;
}
public void setSkip(boolean skip) {
this.skip = skip;
}
}
最后,您可以使用類似的東西將json中的規則轉換為java:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.List;
import com.google.gson.Gson;
public class GsonTest {
public static void main(String[] args) throws FileNotFoundException {
BufferedReader bufferedReader = new BufferedReader(new FileReader("C:/Users/JESNAMOL/Desktop/json.txt"));//i have kept your json string in a file for demonstration
Gson gson = new Gson();
Data data = gson.fromJson(bufferedReader, Data.class);
List<Rule> rules = data.getRules();
for (Rule rule : rules) {
System.out.println("element: " + rule.getElement());
System.out.println("skip: " + rule.isSkip());
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.