关于java:从XAgent创建Json

Creating Json from XAgent

我正在尝试使用 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 输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[
  {
     // 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
     }

]

不是它是多个"对象",最后一个似乎是键值的整数和字符串的组合。

这是我尝试过的一些代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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
2
3
4
5
{
   "1":"Zero",
   "2":"One",
   "3":"Two"
}

注意键值的引号。我认为这将是一个问题。我能够获得整数作为密钥。而且我不确定如何将整数与字符串混合,如第三个对象示例中所示。

任何建议将不胜感激。谢谢!


不能以这种方式使用整数:
{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


使用 Gson。为您节省大量头痛。必须在插件中才能使安全工作。用集合和地图等创建一个结果类。然后有 2 行:

1
2
   Gson g = new Gson();
   g.toJson(this);

有一个构建器和一些注释用于选项,例如漂亮的打印或与变量名称不同的命名元素。

在高空啄玻璃。将包含错别字。