CURL导入Meilisearch数据时触发Invalid JSON: line 1 column 1报错
报错核心诱因
- 你目前的Meilisearch Docker启动流程、本地JSON文件校验逻辑都是完全合规的,唯一的问题点出在CURL的参数使用上:
--data参数的作用是将其后紧跟的字符串直接作为请求体内容发送,不会自动读取对应路径下的本地文件。 - 按照你现有写法执行时,Meilisearch实际收到的请求体只是纯字符串
"products.json"或者"movies.json"本身,完全没有读到你本地存储的合法JSON数据。这时候JSON解析器在请求体的第1行第1个位置,收到的是字母p或m,既不是对象起始符{也不是数组起始符[,自然会触发「Invalid JSON: expected value at line 1 column 1」的报错。 - 这个报错和你本地JSON文件的格式合规性完全无关——哪怕你反复校验文件、甚至直接用Meilisearch官方提供的示例JSON测试,只要请求没有把文件的实际内容发送到服务端,报错就会稳定复现。
修正后的正确请求写法
要让curl正确读取本地JSON文件的内容并作为请求体发送,只需要在文件路径前加@前缀,告知curl需要从对应文件中加载内容:
- 原products索引的导入命令修正后:
curl -X POST 'http://127.0.0.1:7700/indexes/products/documents' --data @products.json
- 原movies示例数据的导入命令修正后:
curl -X POST 'http://127.0.0.1:7700/indexes/movies/documents' --data @movies.json
可选的兼容性优化写法
- 手动指定JSON格式的请求头,避免curl默认携带的表单格式头部引发不必要的校验问题:
curl -X POST 'http://127.0.0.1:7700/indexes/movies/documents' \ -H 'Content-Type: application/json' \ --data @movies.json
- 导入体积超过1GB的大JSON文件时,替换
--data为--data-binary,避免curl对内容做不必要的转义处理,同时降低大文件传输的内存占用:
curl -X POST 'http://127.0.0.1:7700/indexes/movies/documents' \ -H 'Content-Type: application/json' \ --data-binary @movies.json
注意事项
@符号和文件路径之间不能加空格,否则会被curl识别为要发送带@前缀的纯字符串,依旧会触发相同的JSON解析错误。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

