【发布时间】:2014-05-31 22:45:10
【问题描述】:
我正在尝试使用 Java 从 XPages“XAgent”创建一些 Json。我正在尝试一种特殊的格式,它使用整数作为键,我不断收到一些我不理解的错误。
这是一个错误示例: 引起:java.lang.ClassCastException:java.lang.Integer 与 java.lang.String 不兼容 在 com.ibm.commons.util.io.json.JsonGenerator$Generator.outObject(JsonGenerator.java:202) 在 com.ibm.commons.util.io.json.JsonGenerator$Generator.outLiteral(JsonGenerator.java:163) 在 com.ibm.commons.util.io.json.JsonGenerator$Generator.outLiteral(JsonGenerator.java:142) 在 com.ibm.commons.util.io.json.JsonGenerator$Generator.toJson(JsonGenerator.java:138) 在 com.ibm.commons.util.io.json.JsonGenerator.toJson(JsonGenerator.java:64) 在 com.ibm.commons.util.io.json.JsonGenerator.toJson(JsonGenerator.java:49)
我正在尝试像这样创建 JSON 输出:
[
{
// minimum
0:{src:'item_one_format_one.ext', type: 'video/...'}
},
{
// one content, multiple formats
0:{src:'item_two_format_one.ext', type: 'video/...'},
1:{src:'item_two_format_two.ext', type: 'video/...'}
},
{
// one content, multiple formats, item specific config
0:{src:'item_three_format_one.ext', type: 'video/...'},
1:{src:'item_three_format_two.ext', type: 'video/...'},
3:{src:'item_three_format_three.ext', type: 'video/...'},
4:{src:'item_three_format_four.ext', type: 'video/...'},
config: {
option1: value1,
option2: value2
}
]
不是多个“对象”,最后一个似乎是键值的整数和字符串的组合。
这是我尝试过的一些代码:
public String testList() throws JsonException, IOException {
Integer count = 0;
Map<String, Object> containerMap = new TreeMap<String, Object>();
System.out.println("A");
TreeMap<String, String> stringMap = new TreeMap<String, String>();
System.out.println("B");
stringMap.put("One", "Value1");
stringMap.put("Two", "Value2");
System.out.println("C");
containerMap.put("1", "One");
count++;
containerMap.put("2", "Two");
count++;
containerMap.put("3", "Three");
System.out.println("D");
String json = JsonGenerator.toJson(new JsonJavaFactory(), containerMap);
System.out.println("E");
return json;
}
这段代码产生:
{
"1": "Zero",
"2": "One",
"3": "Two"
}
注意键值的引号。我认为这将是一个问题。我能够获得整数作为密钥。而且我不确定如何将整数与字符串混合,如第三个对象示例所示。
任何建议将不胜感激。谢谢!
【问题讨论】:
-
Afaik Json 键必须是字符串
-
我认为,键必须是字符串。第二个 JSON 是正确的,JSONLint 是你的朋友:jsonlint.com
-
仅字符串?嗯,我不知道。我只是真正尝试过尝试为 Projekktor 项目采用这种格式:projekktor.com/docs/playlists,它显示了前导整数。也许它可以与数字周围的双引号一起正常工作。我会试试看。谢谢
标签: java json xpages projekktor