2015-09-17 8 views
0

У меня есть два JSON. Первое значение. РЕДАКТИРОВАТЬ:Получить от JSON Значение

[{ 
"objectDimStr": ["Laenge in m: 8630", 
"Anzahl Fahrstreifen in : 4", 
"Anzahl Bruecken in : 5", 
"Anzahl Bauwerke in : 5"], 
"objectDim": { 
    "value": "5", 
    "unit": "", 
    "dimension": "Anzahl Bauwerke" 
}, 
"objectType": "Strecke Landstrasse", 
"objectSpec": ["inkl. Entw\u00E4sserungsanlagen", 
"begleitender Geh-\/Radweg"], 
"object": "Strassenverkehrswege" 
}] 

Вторая конфигурация.

[{ 
    "name": "Objekt", 
    "propertyName": "object" 
}, 
{ 
    "name": "Objekttyp", 
    "propertyName": "objectType" 
}, 
{ 
    "name": "Kennzahlen(Einheit: Wert)", 
    "propertyName": "objectDimStr" 
}, 
{ 
    "name": "Objektspezifikation", 
    "propertyName": "objectSpec" 
}] 

Теперь я хочу отобразить это в таблице.

<table 
id="tablePager" 
class="table table-striped table-condensed mat-table table-response"> 
<thead> 
    <tr> 
     <xp:repeat 
      id="repTabHeader" 
      rows="10000" 
      value="#{javascript:compositeData.TableConfObj.Config;}" 
      var="confName"> 
      <th class="table-width valign-top"> 
       <xp:text value="#{javascript:confName.name}"></xp:text> 
      </th> 
     </xp:repeat> 
    </tr> 
</thead> 
<tbody> 
    <xp:repeat 
     id="repTabBody" 
     rows="10000" 
     value="#{javascript:compositeData.Obj;}" 
     var="entry"> 
     <tr> 
      <xp:repeat 
       id="repTabBodyVal" 
       rows="10000" 
       value="#{javascript:compositeData.TableConfObj.Config;}" 
       var="confProperty"> 
       <td class="table-width valign-top"> 
        <xp:inputTextarea 
         id="inputTextarea1" 
         readonly="true"> 
         <xp:this.value> 
          <![CDATA[#{javascript: 
           var propName = confProperty.propertyName; 
           if ((propName == null || propName == "")) { 
            return ""; 
           } else { 
            var propValue = entry.get(propName); 
            if ((propValue == null || propValue == "")) { 
             return ""; 
            } else { 
             if (propValue.getClass() == "class java.util.ArrayList"){ 
              return propValue.join(", "); 
             } else { 
              return propValue; 
             } 
            } 
           } 
          }]]> 
         </xp:this.value> 
        </xp:inputTextarea> 
       </td> 
      </xp:repeat> 
     </tr> 
    </xp:repeat> 
</tbody> 

Проблема заключается в 'entry.get (PROPNAME)'. В одном случае я получаю значение от JSON. В другом случае я получаю сообщение об ошибке.

Script ошибка переводчика, строка = 6, цв = 143: [TypeError] Ошибка вызова метод 'получить (java.lang.String)' на объект типа 'Строка [JavaScript Object]

Как я могу получить значение от JSON без get. Я не знаю названия JSON-записей, только в конфигурации JSON.

ответ

0

Я чувствую, что сталкивался с этим раньше, но я не помню решения. Будет продолжать ломать голову, чтобы попытаться вспомнить, как я ее решил.

В то же время, вы можете попробовать это: var propName:java.lang.String = confProperty.propertyName;

EDIT: на самом деле, ошибка указывает, что переменная entry является строка, а не JSONObject, таким образом, вы не можете вызвать метод GET. Первоначально я думал, что это не нравится аргумент вызова метода. Не уверен, что вы настроили для пользовательских свойств настраиваемого элемента управления в Obj, может быть проблема. Если вы добавите это, это может сделать трюк:

var jsonEntry = toJson(entry); 
var propValue = jsonEntry.get(propName); 
+0

К сожалению, нет. Но thx для стеллажа. – khsopro

+0

Хорошо. complexData.Obj ist type 'object'. Но они не знают JSON. [ReferenceError] 'JSON' не найдено Что не так! – khsopro

+0

typeof из записи com.ibm.commons.util.io.json.JsonJavaObject. – khsopro

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