繁体   English   中英

将Java字符串数组或JSON字符串转换为Javascript数组(Parse.com云代码和Mandrill)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM