将Convertig Json转换为列表

时间:2016-12-14 10:05:42

标签: java json database gson

我正在尝试读取和编写一个Json对象到我的数据库,我没有得到如何将从数据库中获得的字符串转换为字符串以及我以后如何使用它tp写回更改的列表再次进入我的数据库。

所以,当我向数据库询问我想要的字段时,我会收到这个字符串:

["[\"pw1\",\"pw2\",\"pw3\"]"]

然后我去创建班级LastPasswords

的对象
List<String> passwordList = (List<String>) controllerServlet.getMacroDatabaseManager().executeNativeQuery(queryGet);
LastPasswords lastPasswords = new LastPasswords(passwordList);
Gson gson = new Gson();
String Json = gson.toJson(lastPasswords);

这是LastPasswords

public class LastPasswords {

    private List<String> passwords;

    public LastPasswords(List<String> passwords) {
        this.passwords = passwords;
    }

    public List<String> getPasswords(){
        return passwords;
    }
    public void setPasswords(List<String> passwords){
        this.passwords = passwords;
    }
}

然后,当我有这个json字符串时,我会尝试将其作为列表,但我没有得到列表。

lastPasswords.setPasswords((List<String>) gson.fromJson(banana, LastPasswords.class));
passwordList = lastPasswords.getPasswords();

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您可以使用com.google.gson.reflect.TypeToken.TypeToken来定义fromJson方法的返回类型。 然后,如果您有列表,则可以创建一个新的LastPasswords来使用。

    String json = "[\"pw1\",\"pw2\",\"pw3\"]";
    Gson gson = new Gson();
    List<String> list = gson.fromJson(json, new TypeToken<List<String>>() {}.getType());
    System.out.println(list.size());
    System.out.println(list);

Output:
3
[pw1, pw2, pw3]

答案 1 :(得分:1)

我建议保留Password课程,而不是保留ListPassword课程。

我们假设您有Password这样的课程。

public class Password {
    public String password;

    // Getter and setter
}

现在,当您使用gson读取json字符串时,您可能必须这样做。

Password[] passwordArray = gson.fromJson(json, Password[].class);

这会将json字符串映射到Password的数组中。然后,如果您愿意,可以考虑在列表中填充它们。

List<Password> passwordList = Arrays.asList(passwordArray);

答案 2 :(得分:1)

您可以使用TypeToken将json字符串加载到自定义对象中。

String json = "[\"pw1\",\"pw2\",\"pw3\"]";
List<String> list = gson.fromJson(json, new TypeToken<List<String>>(){}.getType());

或者是String列表

String json = "[\"[\"pw1\",\"pw2\",\"pw3\"]\"]";
List<List<String>> list = gson.fromJson(json, new TypeToken<List<List<String>>>(){}.getType());

list.get(0).get(0) == "pw1"