ローカルの 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オブジェクトにラップしました。私がやろうとしていることは明らかに間違っていますか?
更新: lambmj の提案に従って、ノードによって生成された文字列をファイルに書き込み、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);