XPages,Javascript - 解析所有键的JSON和返回值
通过使用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);
}
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
将不胜感激任何输入。谢谢。
如果您愿意使用Java库,好消息是IBM已经为您完成了大量工作。查看com.ibm.commons.util.io.json.JsonParser
和com.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字符串。您可能会遇到第一个元素的问题,因为它没有属性名称,但它也没有值。
我实施了地图,但有一个错误,我已经在上面添加了。请看我的代码片段。谢谢你的帮助。 –
TT_mapStringString在你的类中是私有的,所以它不能被任何东西(包括SSJS)访问。你需要添加一个getter并使用它。之后的行会失败,因为'Map
Paul在声明SSJS中声明:您的数据源是什么?您如何访问它?通过http?你使用哪种方法? –
供参考:http://dontpanic82.blogspot.sk/2010/09/xpages-ssjs-code-snippet-that-lets-you.html –