如何在python -m json.tool中包含\ n

时间:2015-08-11 14:40:49

标签: python json shell python-2.7 zsh

我正在尝试通过shell创建一个json文件,但是,现在允许新行并通过错误。

Invalid control character at: line 5 column 26 (char 87)指向\n

echo '{
    "param1": "asdfasf",
    "param2": "asffad",
    "param3": "asdfsaf",
    "param4": "asdfasf\nasfasfas"
}' | python -m json.tool > test.json

假设我想保留新行,我怎样才能把它放到json文件中?

更新

我认为它与python的json编码器/解码器的严格模式有关。

  

如果strict为False(默认为True),则控制字符将为   允许在字符串内。在这种情况下控制字符是   字符代码在0-31范围内的那些,包括'\ t'(制表符),   '\ n','\ r'和'\ 0'。

https://docs.python.org/2/library/json.html

如何在False内将严格模式设置为python -m json.tool

2 个答案:

答案 0 :(得分:1)

逃离\似乎可以解决问题:

echo  '{
    "param1": "asdfasf",
    "param2": "asffad",
    "param3": "asdfsaf",
    "param4": "asdfasf\\nasfasfas"
}' | python -m json.tool > test.json

它创建了有效的json:

with open('/home/test.json', 'rU') as f:
    js = json.load(f)
    print(js)
    print(js["param4"])

输出:

{'param1': 'asdfasf', 'param3': 'asdfsaf', 'param2': 'asffad', 'param4': 'asdfasf\nasfasfas'}
asdfasf
asfasfas

答案 1 :(得分:1)

zsh正在用适当的回车替换\n。您可以转义它或使用heredoc样式:

python -m json.tool > test.json << EOF
{
"param1": "asdfasf",
"param2": "asffad",
"param3": "asdfsaf",
"param4": "asdfasf\nasfasfas"
}
EOF