我有一个JSON片段。
以下内容不起作用:
VALUE=<<PERSON
{
"type": "account",
"customer_id": "1234",
"customer_email": "jim@gmail.com"
}
PERSON
echo -n "$VALUE" | python -m json.tool
结果是:
JSON对象无法解码
对进行相同的操作jq
,即
echo -n "$VALUE" | jq '.'
没有输出。
对于以下情况,存在相同的行为:
VALUE=<<PERSON
'{
"type": "account",
"customer_id": "1234",
"customer_email": "jim@gmail.com"
}'
PERSON
echo -n "$VALUE" | python -m json.tool
响应:
JSON对象无法解码
但是以下工作原理:
VALUE='{
"type": "account",
"customer_id": "1234",
"customer_email": "jim@gmail.com"
}'
echo -n "$VALUE" | jq '.'
echo -n "$VALUE" | python -m json.tool
5
我不知道bash在做什么,但是在前两个电子邮件字符串后面有一个逗号结尾,但在第三个字符串后面没有逗号,这会使前两个成为非法JSON
—
Nick T
@NickT您应该做出一个答案,因为我认为这正是问题所在。
—
rrauenza
如果那是(唯一的)答案,则可能应将其关闭,因为“无法复制(错别字)”。但是,看起来Kusa和terdon的答案提到分配+重定向已完全中断,所以您得到一个空字符串,因此存在两个问题,这两个问题都将产生相同的“ No JSON ...”错误。通过在中间检查您的假设来平分问题是一个很好的实践:一个简单的
—
尼克T
echo $VALUE
not ... | jq
会提供很多信息。
@NickT:那是复制/粘贴问题。抱歉给您带来的困惑
—
Jim