2017-02-16 14 views
0

Я присоединился к странам к местоположениям в базе данных образцов HR в OracleXE.Почему tWriteJSONField создает массив для нулевых значений?

Я использую tMap для создания вложенного документа JSON.

enter image description here

это работает, но некоторые нулевые значения причина в том месте, приходят через как массивы в конечном выходе в консоли (также пытались MongoDB).

enter image description here

ответ

0

Поскольку tWriteJSONField генерирует XML, а затем преобразует его в JSON с помощью JSON-Lib. Ваше нулевое значение будет преобразовано в пустой узел xml <STATE_PROVINCE/>, а json-lib, не имеющий контекста этого узла, будет считать, что это родительский узел без каких-либо дочерних элементов, а не пустой текст (нулевое понятие уже далеко в этом пункте).

Вот что происходит в коротком:

package test.json; 

public class JSONTest { 

    public static void main(String[] args) { 
     net.sf.json.xml.XMLSerializer s = new net.sf.json.xml.XMLSerializer(); 
     s.clearNamespaces(); 
     s.setSkipNamespaces(true); 
     s.setForceTopLevelObject(true); 
     net.sf.json.JSON json = s.read("<?xml version=\"1.0\" encoding=\"ISO-8859-15\"?>" + 
       "<org>" + 
       "<STATE_PROVINCE/>" + 
       "</org>" 
     ); 
     System.out.println(json.toString()); 
    } 

} 

Результат:

{"org":{"STATE_PROVINCE":[]}} 

Грязное решением является использование атрибутов вместо узлов в вашем tWriteJSONField, но это будет префикс ваших свойств с @. Итак, после этого компонента вы поместите tReplace, найдите "\"@", замените на "\"", снимите все слово, проверьте глобальное выражение. Ваш последний JSON не будет иметь свойства, если null.

+0

Отлично ... большое спасибо – smackenzie

+0

Или, потому что Talend является мозг мертв. Я понимаю техническую причину: но никакой разумный пакет программного обеспечения не был бы разработан с таким поведением. Я видел объяснения, что это «ожидаемое» поведение. У нас есть эти небольшие поиски и замена фрагментов java на всех наших рабочих местах. – fool4jesus

 Смежные вопросы

  • Нет связанных вопросов^_^