Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用gson将json转换为json对象_Java_Java 8_Gson - Fatal编程技术网

Java 使用gson将json转换为json对象

Java 使用gson将json转换为json对象,java,java-8,gson,Java,Java 8,Gson,我有一个定义如下的类- public class info { private final string name; private final string add; private final Map<String, Skill> skills; } public class Skill { String subCategory; String proficiency; } JSON as - { "name": "abc", "add":

我有一个定义如下的类-

public class info {
  private final string name;
  private final string add;
  private final Map<String, Skill> skills;
}

public class Skill {
  String subCategory;
  String proficiency;
}

JSON as  -
{
   "name": "abc",
   "add": "random",
   "skills": {
     "java": {
       "subCategory": "soft",
       "proficiency": "A"
     }
    "C#": {
       "subCategory": "soft",
       "proficiency": "B"
     }
  }
}
公共类信息{
私有最终字符串名;
私有最终字符串添加;
私人最终地图技能;
}
公开课技能{
字符串子类别;
弦乐熟练程度;
}
JSON as-
{
“名称”:“abc”,
“添加”:“随机”,
“技能”:{
“java”:{
“子类别”:“软”,
“熟练程度”:“A”
}
“C#”:{
“子类别”:“软”,
“熟练程度”:“B”
}
}
}
如何将此json转换为java对象信息?我曾尝试使用gson库,但遇到多个错误

这个问题是因为地图里面有一个类的技能。不知道如何转换。 我看了一个例子
但是它非常简单,在类中没有列表或映射。

代码中有一些错误,但是在修复这些错误后,它就可以工作了

  • 您试图用
    string
    而不是
    string
    定义字符串
  • 您在
    info
    中将变量定义为
    final
    ,但您没有定义它们(删除final关键字有效)
  • 您在JSON中的技能数组中缺少一个
下面是一个实际有效的示例:

public class Main {
    public static void main(String[] args) {
        String json = "{\r\n"
                + "   \"name\": \"abc\",\r\n"
                + "   \"add\": \"random\",\r\n"
                + "   \"skills\": {\r\n"
                + "     \"java\": {\r\n"
                + "       \"subCategory\": \"soft\",\r\n"
                + "       \"proficiency\": \"A\"\r\n"
                + "     },\r\n"
                + "    \"C#\": {\r\n"
                + "       \"subCategory\": \"soft\",\r\n"
                + "       \"proficiency\": \"B\"\r\n"
                + "     }\r\n"
                + "  }\r\n"
                + "}";

        Info info = new Gson().fromJson(json, Info.class);
        System.out.println(info.getSkills());
    }

}

class Info {
    private String name;
    private String add;
    private Map<String, Skill> skills;

    public String getName() {
        return this.name;
    }

    public String getAdd() {
        return this.add;
    }

    public Map<String, Skill> getSkills() {
        return this.skills;
    }
}

class Skill {
    String subCategory;
    String proficiency;
}
公共类主{
公共静态void main(字符串[]args){
字符串json=“{\r\n”
+“名称”:“abc\”,\r\n
+“\”添加“:\”随机“,\r\n”
+“\”技能\“:{\r\n”
+“\“java\”:{\r\n”
+“子类别”:“软的”,\r\n
+“\”熟练程度\“:\”A\“\r\n”
+}\r\n
+“\“C”\:{\r\n”
+“子类别”:“软的”,\r\n
+“\”熟练程度\“:\”B\“\r\n”
+“}\r\n”
+“}\r\n”
+ "}";
Info=new Gson().fromJson(json,Info.class);
System.out.println(info.getSkills());
}
}
班级信息{
私有字符串名称;
私有字符串添加;
私人地图技能;
公共字符串getName(){
返回此.name;
}
公共字符串getAdd(){
返回此文件。添加;
}
公共地图getSkills(){
归还这本书。技能;
}
}
课堂技能{
字符串子类别;
弦乐熟练程度;
}
我还将
info
重命名为
info
,因为类名应该以大写字母开头&为私有变量添加了getter