![](/img/trans.png)
[英]Populating a String[] Array with data from Parse.com (Android)
[英]Convert Java string array or JSON string to Javascript Array (Parse.com Cloud Code and Mandrill)
我正在尝试使用Javascript(针对我的Parse.com云代码)创建一个数组,该数组使我能够将我从Java应用程序传递到名为“ email”的键的String数组中的每个字符串配对。 这样,我可以将Mandrill的要发送邮件的“ to”属性设置为多封电子邮件。
我函数的第一行, var recipientJavaArray = request.params.toEmail.split(",");
我试图将传入的Java JSON字符串(从Java字符串数组格式化)转换为Javascript字符串数组。
之后的for循环是我尝试创建一个新的二维数组,其中它们本质上是键值对:“ email” =>“ sample@gmail.com”
在此转换过程中,我似乎在做错什么,似乎没有用? 控制台日志仍将其报告为成功,因为已将电子邮件发送到Mandrill的服务器:
I2014-07-10T06:34:40.618Z] v8:跑云函数sendEmail与:输入:{“ fromEmail”:“ k ***** @ gmail.com”,“ toEmail”:“ [\\” k ** *** @ gmail.com \\“,\\” a *********** @ gmail.com \\“]”,“ text”:“样本测试文本”,“ fromName”:“样本测试名称”,“ toName”:“样本收件人名称”,“主题”:“测试5”}结果:电子邮件已发送!
这是我传入的JSON字符串的Java代码,以及如何将字符串数组转换为JSON字符串。 也许我在这里做错了什么?
Gson converter = new Gson();
String recipientsInJson = converter.toJson(recipients);
params.put("toEmail", recipientsInJson);
下面是针对上下文的完整Javascript函数:
Parse.Cloud.define("sendEmail", function(request, response) {
var recipientJavaArray = request.params.toEmail.split(",");
var recipientArray = new Array();
for (var i = 0; i < recipientJavaArray.length; i++) {
var oneRecipient = new Array();
oneRecipient["email"] = recipientJavaArray[i];
recipientArray.push(oneRecipient);
}
var Mandrill = require('mandrill');
Mandrill.initialize('1C7****************OQ');
Mandrill.sendEmail({
message: {
text: request.params.text,
subject: request.params.subject,
from_email: request.params.fromEmail,
from_name: request.params.fromName,
/*THIS is what I am trying to get to work. It is an array struct.*/
to: recipientArray
},
async: true
},{
success: function(httpResponse) {
console.log(httpResponse);
response.success("Email sent!");
},
error: function(httpResponse) {
console.error(httpResponse);
response.error("Uh oh, something went wrong");
}
}); });
有关Mandrill中“ to”参数的确切含义及其组成的文档,可以在以下位置找到: https : //mandrillapp.com/api/docs/messages.html
也许有比我目前正在尝试的方法更好的方法吗? 像用Java的数组(或HashMap?)中的“ email”键为电子邮件字符串拟合,然后将其带到Javascript并将其转换回标准Javascript数组一样? 那有可能吗? 如果是这样,我该怎么做? 任何帮助将不胜感激。
我终于自己解决了。 事实证明,传入的JSON字符串需要由JSON解析,以将其正确格式化为Javascript数组。 这是我所做的:
var recipientJavaArray = request.params.toEmail;
var recipientArray = JSON.parse(recipientJavaArray);
然后我在尝试创建具有键-值结构的二维数组时是错误的。 我发现Javascript中的数组不支持键-这是Javascript中的对象。 因此,我更改了for循环以创建要存储在Array中而不是Array中的接收方对象。
var recipients = [];
for (var i = 0; i < recipientArray.length; i++) {
var recipientObject = {};
recipientObject["email"] = recipientArray[i];
recipients.push(recipientObject);
}
我希望这对遇到类似问题的人有所帮助。 这是完整,正确的功能,以供将来其他人参考并方便使用:
Parse.Cloud.define("sendEmail", function(request, response) {
var recipientJavaArray = request.params.toEmail;
var recipientArray = JSON.parse(recipientJavaArray);
var recipients = [];
for (var i = 0; i < recipientArray.length; i++) {
var recipientObject = {};
recipientObject["email"] = recipientArray[i];
recipients.push(recipientObject);
}
var Mandrill = require('mandrill');
Mandrill.initialize('1C7****************fOQ');
Mandrill.sendEmail({
message: {
text: request.params.text,
subject: request.params.subject,
from_email: request.params.fromEmail,
from_name: request.params.fromName,
to: recipients
},
async: true
},{
success: function(httpResponse) {
console.log(httpResponse);
response.success("Email sent!");
},
error: function(httpResponse) {
console.error(httpResponse);
response.error("Uh oh, something went wrong");
}
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.