Создание Json из XAgent

Я пытаюсь создать Json из XPages "XAgent", используя Java. Есть определенный формат, который я пытаюсь использовать, и он использует 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
     }

]      

Не то, чтобы это было несколько "объектов", и последний кажется комбинацией 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"
}

Обратите внимание на кавычки для значения ключа. Я предполагаю, что это будет проблемой. Я был в состоянии получить целые числа для ключа. И я не уверен, как смешивать целые числа со строкой, как показано в третьем примере объекта.

Любой совет будет принят во внимание. Спасибо!

2 ответа

Таким образом нельзя использовать целое число: {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 строки:

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

Есть конструктор и несколько аннотаций для таких опций, как красивая печать или присваивание имен элементам, отличным от имен переменных.

Клюнул на стекло на большой высоте. Будет содержать опечатки.

Другие вопросы по тегам