Insomnia中POST API请求遇JSON转义字符语法错误求助
问题分析与解决
错误根源
你遇到的语法错误是因为JSON中的\u0021(Unicode转义的感叹号!)在bash环境下被错误解析,同时bash对特殊字符(如!、$)的处理逻辑导致转义混乱,API收到的内容不符合JSON规范。
解决方案
1. 修复JSON内容
将所有\u0021直接替换为!——感叹号在JSON中无需转义,原转义属于冗余操作,反而引发bash解析问题。修复后的JSON如下:
{"operationName": "Holdings","variables": {"countrycode": "DE","languagecode": "de_DE","fundid": "27854"},"query": "query Holdings($fundid: String!, $countrycode: String!, $languagecode: String!) {\n Portfolio(\n fundid: $fundid\n countrycode: $countrycode\n languagecode: $languagecode\n ) {\n fundname\n producttype\n assetclass\n portfolio {\n topholdings {\n asofdate\n hldngname\n geocode\n sectorname\n brkdwnpct\n frequency\n calcbasislocal\n calctypelocal\n allocflag\n hasderivatives\n }\n dailyholdings {\n asofdate\n frequency\n secticker\n isinsecnbr\n cusipnbr\n secname\n quantityshrpar\n origcouponrate\n sctrname\n pctofnetassets\n mktvalue\n notionalmktvalue\n secexpdate\n assetclasscatg\n mktcurr\n contracts\n }\n fullholdings {\n asofdate\n asofdatestd\n frequency\n secticker\n isinsecnbr\n cusipnbr\n secname\n quantityshrpar\n origcouponrate\n sctrname\n pctofnetassets\n mktvalue\n notionalmktvalue\n secexpdate\n assetclasscatg\n mktcurr\n contracts\n finalmaturitydate\n investmentcategory\n }\n }\n }\n}\n"}
2. 正确调用cURL的两种方式
方式一:通过文件传递JSON(推荐,避免字符解析问题)
- 将修复后的JSON保存为
request.json文件 - 执行cURL命令:
curl -X POST -H "Content-Type: application/json" -d @request.json YOUR_API_URL
方式二:命令行直接传递
用单引号包裹整个JSON内容,防止bash解析其中的特殊字符:
curl -X POST -H "Content-Type: application/json" -d '{ "operationName": "Holdings", "variables": { "countrycode": "DE", "languagecode": "de_DE", "fundid": "27854" }, "query": "query Holdings($fundid: String!, $countrycode: String!, $languagecode: String!) {\n Portfolio(\n fundid: $fundid\n countrycode: $countrycode\n languagecode: $languagecode\n ) {\n fundname\n producttype\n assetclass\n portfolio {\n topholdings {\n asofdate\n hldngname\n geocode\n sectorname\n brkdwnpct\n frequency\n calcbasislocal\n calctypelocal\n allocflag\n hasderivatives\n }\n dailyholdings {\n asofdate\n frequency\n secticker\n isinsecnbr\n cusipnbr\n secname\n quantityshrpar\n origcouponrate\n sctrname\n pctofnetassets\n mktvalue\n notionalmktvalue\n secexpdate\n assetclasscatg\n mktcurr\n contracts\n }\n fullholdings {\n asofdate\n asofdatestd\n frequency\n secticker\n isinsecnbr\n cusipnbr\n secname\n quantityshrpar\n origcouponrate\n sctrname\n pctofnetassets\n mktvalue\n notionalmktvalue\n secexpdate\n assetclasscatg\n mktcurr\n contracts\n finalmaturitydate\n investmentcategory\n }\n }\n }\n}" }' YOUR_API_URL
注意:JSON中的
\n在单引号包裹下会被原样传递给API,API可正常解析,无需修改。
内容的提问来源于stack exchange,提问作者StOp
相关产品推荐
相关产品推荐

