Javascript 如何将包含各种元素的JSON数组传递给http负载?

Javascript 如何将包含各种元素的JSON数组传递给http负载?,javascript,xml,json,http,wso2esb,Javascript,Xml,Json,Http,Wso2esb,我正在尝试为ToodledoAPIv3开发WSO2 ESB连接器。在该API中,我需要添加一组具有各种参数的任务。数组中一个元素中的参数数量可以不同于其他元素。 API调用如下所示 http://api.toodledo.com/3/tasks/add.php access_token=yourtoken tasks=[{"title"%3A"My Task"}%2C{"title"%3A"Another"%2C"star"%3A"1"%2C"ref"%3A"98765"}%2C

我正在尝试为ToodledoAPIv3开发WSO2 ESB连接器。在该API中,我需要添加一组具有各种参数的任务。数组中一个元素中的参数数量可以不同于其他元素。 API调用如下所示

http://api.toodledo.com/3/tasks/add.php
    access_token=yourtoken
    tasks=[{"title"%3A"My Task"}%2C{"title"%3A"Another"%2C"star"%3A"1"%2C"ref"%3A"98765"}%2C{"title"%3A""%2C"ref"%3A"1234"}]
    fields=folder,star
<payloadFactory media-type="xml">
            <format>
                <xform>
                    <access_token>$1</access_token>
                    <tasks>$2</tasks>
                    <fields>$3</fields>
                </xform>
                <!--{
                    "access_token" : "$1",
                    "tasks" : "$2"
                    "fields" : "$3"
                }-->
            </format>
            <args>
                <arg expression="$func:access_token" />
                <arg expression="get-property('uri.var.encoded_query')" />
                <arg expression="$func:fields" />
            </args>
</payloadFactory>
通过创建JSON对象并向API提交POST来添加任务。 我还需要在通过URL传输之前对数据进行编码

我使用javascript尝试了这个操作。我刚刚尝试在数组中使用两个参数(强制-标题和可选-星形)。我的代码如下

http://api.toodledo.com/3/tasks/add.php
    access_token=yourtoken
    tasks=[{"title"%3A"My Task"}%2C{"title"%3A"Another"%2C"star"%3A"1"%2C"ref"%3A"98765"}%2C{"title"%3A""%2C"ref"%3A"1234"}]
    fields=folder,star
<payloadFactory media-type="xml">
            <format>
                <xform>
                    <access_token>$1</access_token>
                    <tasks>$2</tasks>
                    <fields>$3</fields>
                </xform>
                <!--{
                    "access_token" : "$1",
                    "tasks" : "$2"
                    "fields" : "$3"
                }-->
            </format>
            <args>
                <arg expression="$func:access_token" />
                <arg expression="get-property('uri.var.encoded_query')" />
                <arg expression="$func:fields" />
            </args>
</payloadFactory>
var-added=0;
var query=“”;
var taskString='{“tasks”:'+mc.getProperty('uri.var.tasks')+'}';
if(mc.getProperty('uri.var.tasks')!=null&&mc.getProperty('uri.var.tasks')!=“”){
var taskObj=eval(“+taskString+”);
if(布尔值(已添加)){
query=query+',“任务”:[';
}否则{
query=query+'“任务”:[';
添加=1;
}
var计数=0;
for(taskObj.tasks中的变量i){
if(taskObj.tasks.hasOwnProperty(i)){
如果(计数=0){
query=query+'{\'title\':\“'+mc.getProperty('uri.var.title')+'\',';
query=query+'{\'star\':\“'+mc.getProperty('uri.var.star')+'\'}';
计数=1;
}否则{
query=query+',{\'title\':\“'+mc.getProperty('uri.var.title')+'\”,';
query=query+'{\'star\':\“'+mc.getProperty('uri.var.star')+'\'}';
}
}
}
query=query+']';
var encoded_query=encodeURIComponent(查询);
}
mc.setProperty('uri.var.encoded\u query',encoded\u query');
]]>
我已经编写了有效载荷工厂,如下所示

http://api.toodledo.com/3/tasks/add.php
    access_token=yourtoken
    tasks=[{"title"%3A"My Task"}%2C{"title"%3A"Another"%2C"star"%3A"1"%2C"ref"%3A"98765"}%2C{"title"%3A""%2C"ref"%3A"1234"}]
    fields=folder,star
<payloadFactory media-type="xml">
            <format>
                <xform>
                    <access_token>$1</access_token>
                    <tasks>$2</tasks>
                    <fields>$3</fields>
                </xform>
                <!--{
                    "access_token" : "$1",
                    "tasks" : "$2"
                    "fields" : "$3"
                }-->
            </format>
            <args>
                <arg expression="$func:access_token" />
                <arg expression="get-property('uri.var.encoded_query')" />
                <arg expression="$func:fields" />
            </args>
</payloadFactory>

$1
$2
$3
但它给了我以下的错误

[2014-09-10 22:39:22,129] ERROR - SynapseJsonPath #stringValueOf. Error evaluating JSON Path <$.access_token>. Returning empty result. Error>>> Unexpected character ({) at position 96.
[2014-09-10 22:39:22,130] ERROR - SynapseJsonPath #stringValueOf. Error evaluating JSON Path <$.tasks>. Returning empty result. Error>>> Unexpected character ({) at position 96.
[2014-09-10 22:39:22,130] ERROR - SynapseJsonPath #stringValueOf. Error evaluating JSON Path <$.fields>. Returning empty result. Error>>> Unexpected character ({) at position 96.
[2014-09-10 22:39:22,132] ERROR - ScriptMediator Failed to get the JSON payload from the input stream. Error>>>
com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 101
[2014-09-10 22:39:22129]错误-SynapseJsonPath#stringValueOf.计算JSON路径时出错。返回空结果。错误>>>位置96处出现意外字符({)。
[2014-09-10 22:39:22130]错误-SynapseJsonPath#stringValueOf.计算JSON路径时出错。返回空结果。错误>>>位置96处的意外字符({)。
[2014-09-10 22:39:22130]错误-SynapseJsonPath#stringValueOf.计算JSON路径时出错。返回空结果。错误>>>位置96处的意外字符({)。
[2014-09-10 22:39:22132]错误-ScriptMediator无法从输入流获取JSON负载。错误>>>
com.google.gson.stream.MalformedJsonException:第1行第101列应为名称
我错过了什么?
如何修改它以使用所有可选参数?

您可以在字典中添加所需字段,然后在该字典上调用JSON.stringify以获得所需的JSON对象

var field = {};
field['key'] = 'value';
然后,使用Ajax查询,您可以在有效负载中检索数据

$.ajax({
        type : "POST",
        url : url,
        data : JSON.stringify(field),
        dataType : "json",
        success : alert('success'),
        error: alert('error')
});