我正在尝试使用Java从XPages“ XAgent”创建一些Json。我正在尝试一种特殊的格式,它使用Integer作为键,并且不断出现一些我不理解的错误。

这是一个示例错误:
引起原因: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"
}


请注意关键值的引号。我认为这将是一个问题。我能够获取Integers作为密钥。而且我不确定如何在第3个对象示例中看到如何将Integers与String混合使用。

任何意见,将不胜感激。谢谢!

最佳答案

不能以这种方式使用整数:
{0:{...}}
这些属性应该是字符串:
{“ 0”:{...}}

也许您需要一个数组来代替:

{ // 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

08-07 18:49