从JSON Value

时间:2015-09-17 10:47:48

标签: json xpages

我有两个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获得了Value。在另一个案例中,我收到了错误。

  

脚本解释器错误,line = 6,col = 143:[TypeError]调用错误   方法'get(java.lang.String)'对'String类型的对象   [JavaScript对象]'

如何在没有get的情况下从JSON获取值。我不知道JSON-Entries的名称,仅在配置-JSON中。

1 个答案:

答案 0 :(得分:0)

我觉得我之前遇到过这种情况,但我不记得这个解决方案。会继续绞尽脑汁想要记住我是如何解决它的。

与此同时,您可以尝试:var propName:java.lang.String = confProperty.propertyName;

编辑:实际上,错误表明entry变量是一个String而不是JSONObject,因此您无法调用get方法。最初我认为它不喜欢方法调用的参数。不确定您为Obj传递的自定义控件的自定义属性的设置可能是一个问题。如果你添加了这个,它可能会做到这一点:

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