【问题标题】:XPages, Javascript - Parse JSON and return values of all keysXPages, Javascript - 解析 JSON 并返回所有键的值
【发布时间】:2017-03-02 11:36:52
【问题描述】:

通过使用 eric restful 的 REST API,我能够返回以下 JSON。

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

我只能返回其中一个键。

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

custList();
//returns London Marketing

我希望能够在不传递任何键的情况下返回所有值。

我们将不胜感激。

感谢 Paul 的回复,我现在已经通过将以下方法添加到 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 () {
	importPackage(com.eric.restful);	
	
	try{
		var myDoc:NotesDocument = database.getProfileDocument("db","");		
		var urlStr = myDoc.getItemValueString("mData");
		
		var custListLiteral = CustRestConsumer.GetRestData(urlStr);
		print("list literal: " + custListLiteral);
		
		var mapList = fromJson(custListLiteral,TT_mapStringString);
		Map<String, String> strObj = CustRestConsumer.jsonToMapStringString(mapList);
		print("strObj: " + strObj);
		
		//var getContact = JSON.parse(custListLiteral);
		//print("value of AAC: " + getContact["\"AAC\""]);
		
	}catch(e){
		print("error getting list: " + e.toString());
	}
	return strObj;
}

我收到以下错误:

error getting list: 'TT_mapStringString' not found

将不胜感激任何意见。谢谢。

【问题讨论】:

标签: javascript json xpages lotus-domino xpages-ssjs


【解决方案1】:

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

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

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

【讨论】:

  • 我实现了地图,但是我在上面添加了一个错误。请看一下我的代码的 sn-p。感谢您的帮助。
  • TT_mapStringString 在您的类中是私有的,因此外部的任何东西(包括 SSJS)都无法访问它。您需要添加一个吸气剂并改用它。之后的行将失败,因为Map&lt;String, String&gt; strObj 是 SSJS 中的 Java 语法,您需要在 SSJS 中使用 var 进行声明
  • Paul:您的数据源是什么,您如何访问它?通过http?你用什么方法?
  • 我不确定我是否遵循。这只是将 JSON 数据转换为 Java Map,任何一方对它所做的事情都超出了范围。 JSON 数据可以存储在一个字段中,可以通过 HTTP POST 发送,可以从例如云朵。这是我引用的行的源代码stash.openntf.org/projects/ODA/repos/demo-servlet/browse/…
猜你喜欢
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 2018-12-25
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多