我有一个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 $VALUEnot   ... | jq会提供很多信息。
                
                  @NickT:那是复制/粘贴问题。抱歉给您带来的困惑
                
                
                  
                    —
                    Jim