pot*_*ato 2 javascript json couchdb node.js
我正在使用 node.js http 模块将 json 数据放入 CouchDB 中。此 json 包含特殊字符“\xc3\xa4”,这会导致 CouchDB 响应“invalid_json”错误。一旦删除或替换了这个特殊字符,数据就成功保存了。我的node.js代码:
\n\nvar data = {\n "a": "Ger\xc3\xa4t"\n};\n\nvar stringifiedData = JSON.stringify(data);\n\nvar http = http || require("http");\n\nvar requestOptions = {\n "host": "localhost",\n "port": "5984",\n "method": "PUT",\n "headers": {\n "Content-Type": "application/json",\n "Content-Length": stringifiedData.length\n },\n "path": "/testdb/test"\n};\n\nvar req = http.request(requestOptions, function (res) {\n res.setEncoding("utf8");\n res.on("data", function (chunk) {\n console.log("Response: " + chunk);\n });\n});\n\nconsole.log("stringifiedData: ", stringifiedData);\n\nreq.end(stringifiedData);\nRun Code Online (Sandbox Code Playgroud)\n\n有趣的是,如果我将这些数据保存到 json 文件中并使用curl 命令将其放入 CouchDB,则数据保存不会出现任何问题。
\n\ncurl -X PUT -d @test.json http://localhost:5984/testdb/test\nRun Code Online (Sandbox Code Playgroud)\n\n我在使用nodejs http.request()时是否错过了一些编码配置?我尝试将“Ger\xc3\xa4t”转换为“utf8”编码:Buffer.from("Ger\xc3\xa4t", "latin1").toString("utf8);但没有帮助。
将包含此特殊字符的 json POST 到 CouchDB /_bulk_docsAPI 时也存在同样的问题。
问题是您包含了 的字符串长度Content-Length,但不包含以字节为单位的长度——特殊字符可以具有更长的长度。尝试将行更改为:
var stringifiedData = new Buffer(JSON.stringify(data));
Run Code Online (Sandbox Code Playgroud)
这应该允许内容长度正确。