将 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)的主要内容,如果未能解决你的问题,请参考以下文章

将字符串(类似json格式)转换为对象或数组

JS中如何把JSON格式的字符串转化为一个对象或数组呢?

JS中如何把JSON格式的字符串转化为一个对象或数组呢?

JS中如何把JSON格式的字符串转化为一个对象或数组呢?

java中怎么将JSON字符串转换成二维数组啊?

如何将json字符串转换为数组