【问题标题】:convert json to json object using gson使用 gson 将 json 转换为 json 对象
【发布时间】:2018-10-29 15:25:31
【问题描述】:

我有一个类定义如下 -

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 转换为 java 对象信息?我曾尝试使用 gson 库,但遇到了多个错误。

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

【问题讨论】:

    标签: java java-8 gson


    【解决方案1】:

    您的代码存在一些错误,但在修复这些错误后,它确实可以工作。

    • 您正在尝试使用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;
    }
    

    我还冒昧地将 info 重命名为 Info,因为类名应该以大写字母开头并为私有变量添加了 getter。

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多