Java JsonObject 数组值转键

3

我刚开始学Java,所以有点困惑。

我想要获取JSON格式的字符串。

我想要的结果是:

{ "user": [ "name", "lamis" ] }

我目前正在做的是:

JSONObject json = new JSONObject();         
json.put("name", "Lamis");
System.out.println(json.toString());

我正在得到这个结果。
{"name":"Lamis"}

我尝试了这个,但它没有起作用: json.put("user", json.put("name", "Lamis"));


2
你的代码中没有提到“user”,为什么你期望在输出中看到它? - Joachim Sauer
我知道,但我不知道如何正确放置它... 但它给出了奇怪的结果。 - Lamis
3个回答

14

试试这个:

JSONObject json = new JSONObject();         
json.put("user", new JSONArray(new Object[] { "name", "Lamis"} ));
System.out.println(json.toString());

然而,您所展示的“错误”结果对于“存在一个名为“lamis”的用户”这个语义来说,比“正确”结果更符合自然映射。

为什么您认为“正确”结果更好?


嗯,我想要添加“年龄”...我是不是搞砸了什么? - Lamis
1
{"name":"Lamis", "age":23}有什么问题吗?这就是JSON对象应该的样子,你的原始代码已经走在了正确的道路上。 - Joachim Sauer
无论如何,感谢您,这正是我想要的。 - Lamis
1
是的,我现在意识到了,但是知道如何做还是很好的,因为它花费了我一些时间。 - Lamis

8

另一种方法是使用JSONArray来呈现列表

   JSONArray arr = new JSONArray();
   arr.put("name");
   arr.put("lamis");

   JSONObject json = new JSONObject();
   json.put("user", arr);

   System.out.println(json);   //{ "user": [ "name", "lamis" ] }

1

可能你想要的与你认为你需要的不同;

你应该有一个单独的“用户”对象来保存所有属性,如姓名、年龄等等。 然后该对象应该有一个方法,给出对象的Json表示形式...

你可以检查下面的代码;

import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;

public class User {
    String  name;
    Integer age;

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public JSONObject toJson() {
        try {
            JSONObject json = new JSONObject();
            json.put("name", name);
            json.put("age", age);
            return json;
        } catch (JSONException e) {
            e.printStackTrace();
            return null;
        }
    }

    public static void main(String[] args) {
        User lamis = new User("lamis", 23);
        System.out.println(lamis.toJson());
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接