2016-12-24 57 views
1

我已经找遍了,发现了一些很好的答案,但我无法让它工作。我发现这个线程(Parsing single json entry to multiple objects with Gson),但我不明白我的问题在哪里。 我想将文件读入新的对象(如果有可能只有一个更好,但我不知道如何)。 首先整型线程然后工具的阵列(其中每一个工具是一个对象)使用GSON多个阵列进行JAVA解析

这是我的TXT文件:

{ 
"threads": 4, 
"tools": [ 

{ 
"tool": "gs-driver", 
"qty": 35 
}, 
{ 
"tool": "np-hammer", 
"qty": 17 
}, 
{ 
"tool": "rs-pliers", 
"qty": 23 
} 
] 
} 

这是我的deseralization类,和两个我的对象类

import com.google.gson.*; 
import com.google.gson.reflect.TypeToken; 

import java.lang.reflect.Type; 
import java.util.List; 

public class Deserializer implements JsonDeserializer<ParseJson> { 

    public ParseJson deserialize(JsonElement json, Type type, 
           JsonDeserializationContext context) throws JsonParseException { 

     JsonObject obj = json.getAsJsonObject(); 

     ParseJson test = new ParseJson(); 
     test.setThreads(obj.get("threads").getAsInt()); 

     Gson toolsGson = new Gson(); 
     Type toolsType = new TypeToken<List<ParseTool>>(){}.getType(); 
     List<ParseTool> toolsList = toolsGson.fromJson(obj.get("tools"), toolsType); 
     test.setTools(toolsList); 
     return test; 
    } 
} 


import java.util.List; 

public class ParseJson { 
    private int threads; 
    private List<ParseTool> tools; 

    public void setThreads(int _threads) { 
     this.threads = _threads; 
    } 


    public int getThreads() { 
     return threads; 
    } 

    public void setTools(List<ParseTool> tools) { 
     this.tools = tools; 
    } 

    public List<ParseTool> getTools() { 
     return tools; 
    } 
} 


public class ParseTool { 

    private int qty; 
    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getQty() { 
     return qty; 
    } 

    public void setQty(int qty) { 
     this.qty = qty; 
    } 
} 

我可以得到“线程”,但由于某种原因它不解析数组。

感谢,

回答

0

ParseTool包含一个名为name属性格式,但JSON表明,它的命名tool

你应该物业name因此改名为tool

public class ParseTool { 

    private int qty; 
    private String tool; 

    public String getTool() { 
     return tool; 
    } 

    public void setTool(String tool) { 
     this.tool = tool; 
    } 

    public int getQty() { 
     return qty; 
    } 

    public void setQty(int qty) { 
     this.qty = qty; 
    } 
} 
+0

十分感谢,错过了。 – Ace66

+0

@ Ace66如果此问题解决了您的问题,您是否愿意提供可接受的标记(至答案的左上角)? :-) –