通过LotusScript我正在使用返回json值的网页,并且我一直无法从lotntcript找到任何库,除了来自openntf的ls.snapps.JSONReader。它可以工作,但文档是有限的。我无法读取值列表中的嵌套数组。我可以使用ibm.common.utils ....库使其在java中工作,但在使用mac客户端和另一个库(javax.swing。*)时遇到了问题,因此我切换到了LotusScript。试图获取lotusscript json reader
我希望别人有经验与ls.snapps.JSONReader库,或者如何做到这一点不同的想法。下面是示例:
读它我使用
Dim jsonReader As jsonReader
Dim vResults As Variant
Dim vPieces As Variant
Dim sJSON As string
sJson= |{ "colorsArray":[{
"red":"#f00",
"green":"#0f0",
"blue":"#00f",
"cyan":"#0ff",
"magenta":"#f0f",
"yellow":"#ff0",
"black":"#000"
}
]
}|
Set jsonReader = New JsonReader
Set vResults = jsonReader.parse(sJson)
vPieces = vResults.items
我没有麻烦当我设置一个单一的级对象,例如:
sJSON = |{"a":"a4255524","a24":true,"ax":"WER!!","b":"Some text"}|
我使用getItemValue方法
msgbox vResults.getitemValue("a24")
将返回“真”值
有没有人使用过这个JSON解析器,你可以给我一些关于如何获取数据的建议吗?
UPDATE和临时解决方案: 要获得的JSON值我必须做两件事情之一:
使用ls替换功能来提取单一维度的数据(即清除{“colorsArray “:[在左侧和]在右侧,然后使用snapps json reader。
我创建了一个使用SBT JSON库并从LotusScript调用它的java库。使用java lib http://bastide.org/2014/03/15/using-the-ibm-social-business-toolkit-to-process-json-objects/
这里是Java代码:
import com.ibm.commons.util.io.json.JsonException;
import com.ibm.commons.util.io.json.JsonJavaFactory;
import com.ibm.commons.util.io.json.JsonJavaObject;
import com.ibm.commons.util.io.json.JsonParser;
import com.ibm.sbt.services.client.base.datahandlers.JsonDataHandler;
import lotus.domino.*;
public class GetJSON extends AgentBase {
public static String pJSON(String jData, String jEntry, String jValue) {
String result2="";
try {
System.out.println("data: " + jData + "\n" + "\n" + "jEntry & jValue: " + jEntry + ", " + jValue);
// print to debug console
// System.out.println("jData: " + jData);
JsonJavaObject jsonObject = (JsonJavaObject) JsonParser.fromJson(JsonJavaFactory.instanceEx, jData);
JsonDataHandler handler = new JsonDataHandler();
handler.setData(jsonObject);
JsonJavaObject entryJson=handler.getEntry(jEntry);
result2=entryJson.getAsString(jValue);
} catch (Exception e) {
System.out.println("Error: " + e);
e.printStackTrace();
result2="";
}
return result2; }
}
和我把它从LotusScript中,如下所示:
Option Public
Option Declare
Use "($getJson)"
UseLSX "*javacon"
Dim mySession As JavaSession
Dim myClass As JavaClass
Dim getJson As JavaObject
result = ""
'....
'add vars here
'....
Set mySession = New JavaSession()
Set myClass = mySession.GetClass("GetJSON")
Set GetJson = myClass.CreateObject()
MsgBox GetJson.pJSON(result2, "colorsArray", "red")
上述重要说明,在阵列串我不得不删除括号[和],因为我在java中得到了一个SBT数组不兼容性错误。我认为这样做可能会把它变成一个单独的对象,但是如果你从Paul的上面的例子中看到Paul的例子,你会发现他并没有将它们添加到他的例子中。
我宁愿在所有Java或所有LotusScript中都这样做,并且可能会使用带有snapps的修改过的json字符串,只是寻找更好的解决方案。
你能解释一下当你检查vPieces时会发生什么吗? –
对于1维vresults是带有7个成员(M_DATA,M_ICOUNT,REPLACE_CR,REPLACE_BLANK,...)的列表的变体M_DATA是包含名称/值对的变体列表。这是我没有问题的例子。 2级对象VPIECES是具有1个值的颜色阵列(VARIANT),但有5个成员(M_VDATA,M_ICOUNT,M_STHREADLIST,M_SERRORMESSAGE,M_IERRORCOUNT)的变体对象。 M_VDATA是包含1个VARIANT [0]和VALUE [7,“”,0]的VARIANT,并且项目[0]包含7个项目(M_VDATA,M_ICOUNT ...等),其中M_VDATA是包含名称/值对。 – carlo