将 Java 字符串数组或 JSON 字符串转换为 Javascript 数组(Parse.com Cloud Code 和 Mandrill)
Posted
技术标签:
【中文标题】将 Java 字符串数组或 JSON 字符串转换为 Javascript 数组(Parse.com Cloud Code 和 Mandrill)【英文标题】:Convert Java string array or JSON string to Javascript Array (Parse.com Cloud Code and Mandrill) 【发布时间】:2014-08-31 11:18:52 【问题描述】:我正在尝试在 javascript 中创建一个数组(用于我的 Parse.com 云代码),这将使我能够将我从我的 java 应用程序传递的字符串数组中的每个字符串配对到一个名为“电子邮件”的键。这样,我可以将 Mandrill 的消息发送的“收件人”属性设置为多封电子邮件。
我函数的第一行,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 数组?这甚至可能吗?如果是这样,我该怎么做? 任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:我终于自己想通了。事实证明,传入的 JSON 字符串需要被 JSON 解析才能正确格式化为 Javascript 数组。这就是我所做的:
var recipientJavaArray = request.params.toEmail;
var recipientArray = JSON.parse(recipientJavaArray);
然后我在尝试创建具有键-> 值结构的二维数组时是错误的。我发现 Javascript 中的数组不支持键 - 那是 Javascript 中的对象。所以我改了for循环来创建接收者Objects来存储在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");
);
);
【讨论】:
以上是关于将 Java 字符串数组或 JSON 字符串转换为 Javascript 数组(Parse.com Cloud Code 和 Mandrill)的主要内容,如果未能解决你的问题,请参考以下文章