通过LotusScript我正在使用一个返回json值的网页,除了openntf的ls.snapps.JSONReader之外,我一直无法找到任何用于lotusscript的库。它有效,但文档有限。我在读取值列表中的嵌套数组时遇到问题。我能够使用ibm.common.utils ....库在java中使用它,但是在使用mac客户端和另一个库(javax.swing。*)时出现问题,所以我切换到了LotusScript。
我希望其他人有使用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")
将返回'true'值
有没有人使用过这个JSON解析器,你能就如何获取数据给我一些建议吗?
更新和临时解决方案: 要获得json值,我必须做以下两件事之一:
使用ls替换函数来提取单维数据(即删除{“colorsArray”:[在左侧]和}在右侧。,然后使用snapps json reader。
< / LI>我使用SBT JSON库创建了一个java库,并从LotusScript中调用它。 Paul Bastide在使用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数组不兼容错误。我认为这样做可能会把它变成一个单一级别的对象,但如果你从上面的URL看保罗的例子,你会发现他也没有将它们添加到他的例子中。
我宁愿在所有Java或所有LotusScript中执行此操作,并且可能会将修改后的json字符串与snapps一起使用,只是寻找更好的解决方案。
答案 0 :(得分:3)
以下是JSON字符串的工作代码。试试吧。
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)
Set vResultData = vResults.GetItemValue("colorsArray")
Forall vResult In vResultData.Items
Msgbox Cstr(vResult.GetItemValue("red"))
Msgbox Cstr(vResult.GetItemValue("green"))
Msgbox Cstr(vResult.GetItemValue("blue"))
Msgbox Cstr(vResult.GetItemValue("cyan"))
Msgbox Cstr(vResult.GetItemValue("magenta"))
Msgbox Cstr(vResult.GetItemValue("yellow"))
Msgbox Cstr(vResult.GetItemValue("black"))
End Forall