我有一个节点控制台应用程序,我试图将一些记录发布到本地 CouchDB 实例上的批量文档 api 并获得“无效的 UTF-8 JSON”。让这特别奇怪的是,我在对象文字上使用 JSON.stringify 生成我的 JSON。
我在http://jsonlint.com/测试了实际的 json,据说它是有效的。我无法在此处发布完整的 json,因为它是目录中的名称和编号,但我可以向您展示一个模拟记录,为您提供基本结构。
{
"family" : "Smith",
"people":{
"Bob":{
"name":"Bob",
"active" : true,
"birthday" : "1/01"
},
"Sue":{
"name": "Sue",
"active" : true,
"birthday" : "1/01"
}
},
"address": {
"street" :"1111 Cool Road",
"city" : "Cincinnati",
"state" : "OH",
"zip" : "11111"
},
"phone" : "923-4908"
};
我将我的记录数组包装在一个带有此处指定的属性“docs”的 json 对象中。我正在尝试做的事情有什么明显的错误吗?
更新:按照lammmj的建议,我将节点生成的字符串写入文件,然后使用curl将其发布到批量文档上传。那工作得很好。不过,我仍然希望有人帮助我更正我的节点代码,以便它在节点内工作。这是构建和发布请求的确切代码
//The result variable is my array of 'family' objects,
//It's generated by parsing a text file, not show here
var postOptions = {
host: 'localhost',
port: '5984',
path: '/members/_bulk_docs',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': result.length
}
};
var request = http.request(postOptions, function(res){
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('Response: ' + chunk);
});
});
var body = { "docs": result};
var stringData = JSON.stringify(body);
console.log(stringData);
request.write(stringData);