【问题标题】:Outputting JSON输出 JSON
【发布时间】:2013-08-24 04:35:24
【问题描述】:

我正在尝试以 JSON 格式输出一个列表,但它并没有按照我想要的方式输出。

这是输出:

{
    "songMap": [
        {
            "SID": "699",
            "SDID": "1079287588763212246"
        },
        {
            "SID": "700",
            "SDID": "1079287588763212221"
        },
        {
            "SID": "701",
            "SDID": "1079287588763212230"
        }
    ]
}

这是我想要的样子:

[
        {
            "SID": "699",
            "SDID": "1079287588763212246"
        },
        {
            "SID": "700",
            "SDID": "1079287588763212221"
        },
        {
            "SID": "701",
            "SDID": "1079287588763212230"
        }
]

我不需要也不想要中间数组,我不确定为什么要添加它。我有一个自定义类如下:

public class songID {
    public int SID;
    public String SDID;

    public songID() {}

    public songID(int key, String value) {
        this.SID  = key;
        this.SDID = value;
    }
}

这是它的序列化方式:

Gson gson = new Gson();
String json = gson.toJson(songMap);

如果我打印出字符串 json ,它看起来就是我想要的样子。然而,服务器正在添加额外的“SongMap”。这是我的变量在类顶部声明的方式:

private List<songID> songMap;
.....
songMap = new ArrayList<songID>();

【问题讨论】:

  • songMap 本身,其中包含许多 songID 对象
  • 似乎有(非便携式)方法可以将 JAX-RS 配置为不这样做(请参阅链接的其他问题),但如果您也控制客户端,那么只需在客户端打开响应。
  • @Thilo 谢谢你的链接,这不是什么大不了的事,我可以在客户端上管理它,只是觉得这是一种奇怪的行为。如果您使用此解决方案/链接创建答案,我会给您信用。

标签: java json jackson jax-rs


【解决方案1】:

您似乎不是直接序列化List,而是将List 命名为songMap 的容器。 (顺便说一下,名称选择令人困惑。)如果您直接序列化List,则结果如下所示。

songMap = new ArrayList<songID>();
songMap.add(new songID(699, "1079287588763212246"));
songMap.add(new songID(700, "1079287588763212221"));

GsonBuilder gb = new GsonBuilder();
Gson gson = gb.setPrettyPrinting().create();

System.out.println(gson.toJson(songMap));

输出:

[
  {
    "SID": 699,
    "SDID": "1079287588763212246"
  },
  {
    "SID": 700,
    "SDID": "1079287588763212221"
  }
]

【讨论】:

  • 对,我在打印 gson 时收到该响应,如上所述,当服务器发送响应时出现问题。使用 Fiddler 分析时得到上述输出。
  • 您可能需要的是gson.toJson(serverResponse.getSongMap());,而不是直接序列化serverResponse。顺便说一句,那是伪代码。我需要查看您的代码才能准确。
猜你喜欢
  • 2016-11-11
  • 2017-10-09
  • 2013-09-06
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
  • 2012-10-10
相关资源
最近更新 更多