以下是我用以下代码打印出的字符串 -
jsonString = data.decode("utf-8")
print jsonString
Run Code Online (Sandbox Code Playgroud)
以下是在控制台上打印出来的字符串 -
{"description":"Script to check testtbeat of TEST 1 server.", "script":"#!/bin/bash\nset -e\n\nCOUNT=60 #number of 10 second timeouts in 10 minutes\nSUM_SYNCS=0\nSUM_SYNCS_BEHIND=0\nHOSTNAME=$hostname \n\nwhile [[ $COUNT -ge \"0\" ]]; do\n\necho $HOSTNAME\n\n#send the request, put response in variable\nDATA=$(wget -O - -q -t 1 http://$HOSTNAME:8080/heartbeat)\n\n#grep $DATA for syncs and syncs_behind\nSYNCS=$(echo $DATA | grep -oE 'num_syncs: [0-9]+' | awk '{print $2}')\nSYNCS_BEHIND=$(echo $DATA | grep -oE 'num_syncs_behind: [0-9]+' | awk '{print $2}')\n\necho $SYNCS\necho $SYNCS_BEHIND\n\n#verify conditionals\nif [[ $SYNCS -gt \"8\" && $SYNCS_BEHIND -eq \"0\" ]]; then exit 0; fi\n\n#decrement the counter\nlet COUNT-=1\n\n#wait another 10 seconds\nsleep 10\n\ndone\n"}
Run Code Online (Sandbox Code Playgroud)
但是当我使用python加载它时json.loads如下所示 -
jStr = json.loads(jsonString)
Run Code Online (Sandbox Code Playgroud)
我收到此错误 -
ERROR Invalid control character at: line 1 column 202 (char 202)
Run Code Online (Sandbox Code Playgroud)
我查看了char 202,但我不知道为什么会导致问题?在我的记事本++中的char 202是e我猜...或者可能是我在计算它错了
知道什么是错的吗?我怎样才能找出导致问题的原因.
更新: -
jsonString = {"description":"Script to check testtbeat of TIER 1 server.", "script":"#!/bin/bash\nset -e\n\nCOUNT=60 #number of 10 second timeouts in 10 minutes\nSUM_SYNCS=0\nSUM_SYNCS_BEHIND=0\nHOSTNAME=$hostname \n\nwhile [[ $COUNT -ge \"0\" ]]; do\n\necho $HOSTNAME\n\n#send the request, put response in variable\nDATA=$(wget -O - -q -t 1 http://$HOSTNAME:8080/heartbeat)\n\n#grep $DATA for syncs and syncs_behind\nSYNCS=$(echo $DATA | grep -oE 'num_syncs: [0-9]+' | awk '{print $2}')\nSYNCS_BEHIND=$(echo $DATA | grep -oE 'num_syncs_behind: [0-9]+' | awk '{print $2}')\n\necho $SYNCS\necho $SYNCS_BEHIND\n\n#verify conditionals\nif [[ $SYNCS -gt \"8\" && $SYNCS_BEHIND -eq \"0\" ]]; then exit 0; fi\n\n#decrement the counter\nlet COUNT-=1\n\n#wait another 10 seconds\nsleep 10\n\ndone\n"}
print jsonString[202]
Run Code Online (Sandbox Code Playgroud)
我得到以下错误 -
KeyError: 202
Run Code Online (Sandbox Code Playgroud)
Joe*_*eng 109
可以在字符串中允许控制字符,如下所示,
json_str = json.loads(jsonString, strict=False)
Run Code Online (Sandbox Code Playgroud)
您可以在python 2 的文档或python 3的文档中找到它
如果strict为false(
True默认值),则字符串中将允许控制字符.此上下文中的控制字符是字符代码在0-31范围内的控制字符,包括'\t'(制表符)'\n','\r'和'\0'.
jfs*_*jfs 35
如果将字符串作为字符串文字复制粘贴到Python源代码中,则可能会出现错误.在这种情况下\n被解释为单个字符(换行符).您可以使用原始字符串文字来修复它(r''使用三引号r'''..'''来避免"'在字符串文字中转义引号).
K.A*_*K.A 16
尝试在 json.loads 中使用“strict=False”,它将忽略“\n”和其他控制字符。像下面这样:
import json
test_string = ' { "key1" : "1015391654687" , "key2": "value2 \n " } '
res = json.loads(test_string, strict=False)
print(res)
Run Code Online (Sandbox Code Playgroud)
输出 :
{'key1': '1015391654687', 'key2': 'value2 \n '}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38552 次 |
| 最近记录: |