尝试获取 lotusscript json reader

Trying to get lotusscript json reader

通过 LotusScript,我正在使用一个 returns 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")

将return一个'true'值

有人用过这个 JSON 解析器吗?你能给我一些关于如何取出数据的建议吗?


更新和临时解决方案: 要获得 json 值,我必须做以下两件事之一:

这里是 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 中都这样做,并且可能会使用带有 snapps 的修改后的 json 字符串,只是寻找更好的解决方案。

这是您的 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