从Java自定义休息控件中的多值字段中获取JSON

时间:2017-01-26 16:15:52

标签: xpages

我有一个用Java编写的自定义rest控件。一切都适用于字符串字段,但不适用于多值字符串字段。我的代码返回

“[Value1,Value2,Value3 ...]”。请注意,值周围没有逗号。在网页上,输出如下所示:

enter image description here

如果我可以在值周围使用逗号,那么前端框架可以轻松解析它。

我试图解析字段中的值并使其格式正确,但似乎无法正确使用。

第一组代码适用于字符串。第二种是尝试为多值字段工作。

非常感谢任何帮助。

writer.startProperty("chgTitle");
      writer.outStringLiteral(String.valueOf(columnValues.get(0)));
writer.endProperty();

writer.startProperty("plpAffected");    
                Object tmpObj = columnValues.get(5);
                if (tmpObj instanceof Vector) {
                       String[] copyArr = new String[((Vector) tmpObj).size()];
                       ((Vector) tmpObj).copyInto(copyArr);
                       writer.outStringLiteral(String.valueOf(copyArr));
                } else {
                }
writer.endProperty();

1 个答案:

答案 0 :(得分:2)

我会建议采用略有不同的方法。我喜欢强制我的JSON结构在任何可能出现多值的情况下使用数组。它看起来像你正在使用Philippe Riand's specialized JSON writer,所以我会假设。

以下是我将如何攻击它:

writer.startProperty("chgTitle");
      writer.outStringLiteral(String.valueOf(columnValues.get(0)));
writer.endProperty();

writer.startProperty("plpAffected");    
    Vector<?> tmpVec = Util.getValueAsVector(columnValues.get(5));
    writer.startArray();
    for ( Object ob : tmpVec ) {
        writer.startArrayItem();
            // assuming String contents
            writer.outStringLiteral(String.valueOf(ob));
        writer.endArrayItem();
    }
    writer.endArray();
writer.endProperty();

要回滚columnValues,我正在使用a Java equivalentmy SSJS getValueAsVector helper function。它检查VectorArrayList,我碰巧几乎只使用它;如果不是,则将其推入新的Vector。这是该方法的样子,

public static Vector<?> getValueAsVector(Object obj) {
  if(obj instanceof java.util.Vector){
    return (Vector<?>) obj;
  }else if( obj instanceof ArrayList ) {
    List<?> o = (List<?>) obj;
    Vector<Object> tmpVec = new Vector<Object>();
    for(int i=0;i<o.size();i++){
      tmpVec.add(o.get(i));
    }
    return tmpVec;
  }else {
    Vector<Object> tmpVec = new Vector<Object>();
    tmpVec.add(obj);
    return tmpVec;
  }
}