这是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文件解析名称和密码时遇到语法错误。
答案 0 :(得分:0)
读取JSON文件更简洁的方法是利用jackson json库的ObjectMapper
类。
参考sample tutorial,了解如何在代码库中包含Jackson库。
简而言之,您将使用User
和name
作为两个字段来创建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上阅读有关杰克逊的更多信息
希望这会有所帮助。