2017-03-02 83 views
0

通过使用eric restful的REST API,我能够返回以下JSON。XPages,Javascript - 解析所有键的JSON和返回值

{ 
 
\t "\"\"": "", 
 
\t "\"AAC\"": "London Marketing", 
 
\t "\"AAD\"": "Broadstairs Marketing", 
 
\t "\"AAE\"": "Matalan Marketing", 
 
\t "\"AAF\"": "Sittingbourne Design" 
 
}

我只能返回的关键之一。

var custList = function() { 
 
\t importPackage(com.eric.restful); \t 
 
\t 
 
\t try{ 
 
\t \t var myDoc:NotesDocument = database.getProfileDocument("db",""); \t \t 
 
\t \t var urlStr = myDoc.getItemValueString("mData"); 
 
\t \t 
 
\t \t var custListLiteral = CustRestConsumer.GetRestData(urlStr); 
 
\t \t print("list literal: " + custListLiteral); 
 
\t \t 
 
\t \t var getContact = JSON.parse(custListLiteral); 
 
\t \t print("value of AAC: " + getContact["\"AAC\""]); 
 
\t \t 
 
\t }catch(e){ 
 
\t \t print("error getting list: " + e.toString()); 
 
\t } 
 
\t return getContact["\"AAC\""]; //returns London Marketing 
 
}

custList(); 
 
//returns London Marketing

我会想能够返回所有值不传递任何键。

任何帮助将不胜感激。

感谢保罗为回应,我现在已经通过添加下面的方法将CustRestConsumer类实现地图:

private static final Gson gson = new GsonBuilder().disableHtmlEscaping().create(); 
 
private static final Type TT_mapStringString = new TypeToken<Map<String,String>>(){}.getType(); 
 

 
public static Map<String, String> getJsonArray(String json) { 
 
    Map<String, String> ret = new HashMap<String, String>(); 
 
    if (json == null || json.isEmpty()) 
 
     return ret; 
 
    return gson.fromJson(json, TT_mapStringString); 
 
}
但是,当我把它称为在下面的javascript函数:

var custList = function() { 
 
\t importPackage(com.eric.restful); \t 
 
\t 
 
\t try{ 
 
\t \t var myDoc:NotesDocument = database.getProfileDocument("db",""); \t \t 
 
\t \t var urlStr = myDoc.getItemValueString("mData"); 
 
\t \t 
 
\t \t var custListLiteral = CustRestConsumer.GetRestData(urlStr); 
 
\t \t print("list literal: " + custListLiteral); 
 
\t \t 
 
\t \t var mapList = fromJson(custListLiteral,TT_mapStringString); 
 
\t \t Map<String, String> strObj = CustRestConsumer.jsonToMapStringString(mapList); 
 
\t \t print("strObj: " + strObj); 
 
\t \t 
 
\t \t //var getContact = JSON.parse(custListLiteral); 
 
\t \t //print("value of AAC: " + getContact["\"AAC\""]); 
 
\t \t 
 
\t }catch(e){ 
 
\t \t print("error getting list: " + e.toString()); 
 
\t } 
 
\t return strObj; 
 
}

我在下面看到一个错误:

error getting list: 'TT_mapStringString' not found 

将不胜感激任何输入。谢谢。

+0

供参考:http://dontpanic82.blogspot.sk/2010/09/xpages-ssjs-code-snippet-that-lets-you.html –

回答

1

如果您愿意使用Java库,好消息是IBM已经为您完成了大量工作。查看com.ibm.commons.util.io.json.JsonParsercom.ibm.commons.util.io.json.JsonFactory类。这些允许将JSON字符串解析为Java Map。在OpenNTF Domino API演示Servlet中,我使用以下代码:

final Map<String, Object> jsonAsObj = (Map<String, Object>) JsonParser.fromJson(JsonJavaFactory.instance, body); 

“body”是从REST服务输入中提取的JSON字符串。您可能会遇到第一个元素的问题,因为它没有属性名称,但它也没有值。

+0

我实施了地图,但有一个错误,我已经在上面添加了。请看我的代码片段。谢谢你的帮助。 –

+1

TT_mapStringString在你的类中是私有的,所以它不能被任何东西(包括SSJS)访问。你需要添加一个getter并使用它。之后的行会失败,因为'Map strObj'是SSJS中的Java语法,您需要使用var' –

+0

Paul在声明SSJS中声明:您的数据源是什么?您如何访问它?通过http?你使用哪种方法? –