【发布时间】:2021-12-15 19:28:38
【问题描述】:
我有以下 JSON,它已通过 https://jsonlint.com/ 验证。但是,当我通过 Xero API 运行它时,它会抛出一个错误,如下所示。
{
"Type": "ACCREC",
"Status": "AUTHORISED",
"DueDate": "2021-12-11T14:24:08Z",
"InvoiceNumber": "PRO152125",
"Contact": {
"ContactID": "ddd-05f9-46dd-b4a6-2ccbb5deb330"
},
"LineItems": [
"{\"Description\": \"test1\", \"Qty\": 0.30, \"UnitAmount\": 950.0, \"TaxType\": \"OUTPUT2\", \"AccountCode\": \"200\"},\n{\"Description\": \"test2\", \"Qty\": 0.30, \"UnitAmount\": 300.0, \"TaxType\": \"OUTPUT2\", \"AccountCode\": \"200\"}"
]
}
{
"ErrorNumber": 14,
"Type": "PostDataInvalidException",
"Message": "JSON for post data was invalid,Error converting value \"{\"Description\": \"test1\", \"Qty\": 0.30, \"UnitAmount\": 950.0, \"TaxType\": \"OUTPUT2\", \"AccountCode\": \"200\"},\n{\"Description\": \"test2\", \"Qty\": 0.30, \"UnitAmount\": 300.0, \"TaxType\": \"OUTPUT2\", \"AccountCode\": \"200\"}\" to type 'Xero.API.Library.DataContracts.LineItem'. Path 'LineItems[0]', line 1, position 417."
}
谁能帮忙解释为什么会这样?
【问题讨论】:
-
有什么理由在 LineItems 中使用 JSON 作为字符串?
-
我认为 Zapier 在尝试发送数据时会自动添加双引号。不知道如何阻止这种情况发生。
-
JSON 和 javascript 对象不是一回事。现在你有两者的混合,这是行不通的。 Zapier 正在发送 JSON(假设它是生成
LineItems内容的原因);在将其插入对象的其余部分之前,您需要JSON.parse。 -
如果你使用 JS 尝试使用 RegExp 来清理 LineItems,类似这样的东西 string.replace(/[\n"\&\r\t\b\f]/g, '\\ $&');
-
这里没有理由求助于正则表达式,而且您可能会在此过程中破坏一些东西。
JSON.parse()就是为此目的而设计的。
标签: javascript json xero-api