我想使用Java程序

时间:2019-04-13 05:44:34

标签: java json

这是userInfo.json

{
 "userInfo":[
 { "name":"John", "password":"Doe" },
 { "name":"Anna", "password":"Smith" },
 { "name":"Peter","password":"Jones" }
]}

这是我的java类的一部分。

try (FileReader reader = new FileReader("C:\\Users\\user\\Documents\\NetBeansProjects\\TomCatServer\\src\\java\\logInfo.json")) {
        //Read JSON file
         JSONObject obj = (JSONObject) jsonParser.parse(reader);
         /*JSONObject obj2= (JSONObject) obj.get("address");
         pr.println(obj2.get("city"));*/
         HashMap<String, String> login = new HashMap<String, String>();
         JSONArray logInfo=(JSONArray) obj.get("userInfo"); 

         for(int i=0; i<logInfo.size(); i++)
         {
         String name = (String)(JSONObject) logInfo[i].get("name");\\error here
         String password = (String)(JSONObject) logInfo[i].get("password");
         \\error here when get the password
         login.put(name,password)
        }

从json文件解析名称和密码时遇到语法错误。

1 个答案:

答案 0 :(得分:0)

读取JSON文件更简洁的方法是利用jackson json库的ObjectMapper类。

参考sample tutorial,了解如何在代码库中包含Jackson库。

简而言之,您将使用Username作为两个字段来创建password模型类。理想情况下,这段代码应该可以解决您的问题。

List<User> myUsers = mapper.readValue(jsonArray, List.class);

但是,由于您在JSON中定义了冗余userInfo,因此您的数据结构并不简单。如果您需要将该密钥保留在json数据中,还应该告诉杰克逊使用以下代码在解析json时跳过根目录。

objectMapper.configure(SerializationConfig.Feature.UNWRAP_ROOT_VALUE, true);

如果您可以更改json文件,建议您按以下方式对其进行重组

[
 { "name":"John", "password":"Doe" },
 { "name":"Anna", "password":"Smith" },
 { "name":"Peter","password":"Jones" }
]

还可以在其github page上阅读有关杰克逊的更多信息

希望这会有所帮助。