转换Java字符串数组或JSON字符串到Javascript数组(Parse.com Cloud Code和Mandri

Convert Java string array or JSON string to Javascript Array (Parse.com Cloud Code and Mandrill)

本文关键字:字符串 数组 Cloud com Code Parse Mandri Javascript Java JSON 转换      更新时间:2023-09-26

我试图在Javascript中创建一个数组(对于我的Parse.com云代码),这将使我能够从字符串数组中配对每个字符串,我从java应用程序传递到一个名为"email"的键。这样,我就可以将Mandrill的message-to-send的'to'属性设置为多封邮件。

函数var recipientJavaArray = request.params.toEmail.split(",");的第一行是我的尝试转换在Java JSON字符串(从Java字符串数组格式化)传入字符串的Javascript数组。

之后的for循环是我试图创建一个新的二维数组,其中它们本质上是键值对:"email"=>"sample@gmail.com"

我在这个转换过程中做错了什么,它似乎不工作?控制台日志仍然将其报告为成功发送了要发送到Mandrill服务器的电子邮件:

[2014-07-10 t06:34:40 .618] v8:运行云函数sendEmail with:输入:{"fromEmail":"k * * * * * @gmail.com"、"toEmail":"['"k * * * * * @gmail.com '",'" ***********@ gmail.com ']","文本":"示例测试文本"、"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中用"email"键在数组(或HashMap?)中匹配电子邮件字符串并将其带到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");
    }
});
});