我试图从XPage" XAgent"创建一些Json。使用Java。我尝试了一种特殊的格式,它使用整数作为键,我不断收到一些我不理解的错误。
这是一个示例错误: 引起: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
}
]
不是多个"对象"最后一个似乎是键值的Integer和String的组合。
这是我尝试过的一些代码,并且有点工作:
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"
}
请注意键值的引号。我认为这将成为一个问题。我可以让Integers进入密钥。而且我不确定如何将Integers与String混合使用,如第3个对象示例中所示。
任何建议都将不胜感激。谢谢!
答案 0 :(得分:4)
不能以这种方式使用整数: {0:{...}} 属性应该是字符串: {&#34; 0&#34;:{...}}
也许您需要一个数组:
{
// one content, multiple formats, item specific config
videoList: [
{src:'item_three_format_one.ext', type: 'video/...'},
{src:'item_three_format_two.ext', type: 'video/...'},
{src:'item_three_format_three.ext', type: 'video/...'},
{src:'item_three_format_four.ext', type: 'video/...'}
],
vidoConfig: {
option1: value1,
option2: value2
}
}
此致 Txemanu
答案 1 :(得分:1)
使用Gson。为您节省大量的麻烦。必须在插件中才能实现安全性。使用集合和地图等创建结果类。然后有两行:
Gson g = new Gson();
g.toJson(this);
有一个构建器和一些注释用于选项,例如不同于变量名称的漂亮打印或命名元素。
高空啄玻璃。将包含拼写错误。