Недопустимый управляющий символ с Python json.loads

Ниже моя строка, которая печатается с помощью кода ниже -

jsonString = data.decode("utf-8")

print jsonString

И ниже строка, распечатанная на консоли -

{"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"}

Но когда я загружу это с помощью python json.loads, как показано ниже,

jStr = json.loads(jsonString)

Я получаю эту ошибку -

ERROR Invalid control character at: line 1 column 202 (char 202)

Я посмотрел на char 202, но я понятия не имею, почему это вызывает проблему? char 202 в моем блокноте ++ есть e Я думаю.. Или может быть, я неправильно его вычисляю

Любая идея, что не так? Как узнать, какая из них вызывает проблемы.

UPDATE: -

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]

Ниже ошибки я получил -

KeyError: 202

Ответы

Ответ 1

В тексте json нет ошибки.

Вы можете получить ошибку, если вы скопируете эту строку в свой исходный код Python в виде строкового литерала. В этом случае \n интерпретируется как один символ (новая строка). Вы можете исправить это, используя вместо этого литералы с исходной строкой (r'', Использовать тройные кавычки r'''..''', чтобы избежать кавычек "' внутри строкового литерала).

Ответ 2

Управляющий символ может быть разрешен внутри строки следующим образом:

json_str = json.loads(jsonString, strict=False)

Вы можете найти это в документах, или документах для Python 3

Если strict это false (True является значением по умолчанию), то управляющие символы будут разрешены внутри строк. В этом контексте управляющими символами являются те, которые имеют коды символов в диапазоне 0–31, включая "\ t" (табуляция), "\n", "\ r" и "\ 0".

Ответ 3

Выбери свои новые строки.

{"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      #dc1dbx1145.dc1.host.com\\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"}

Работает для меня.

Кроме того, если вы получите такую ​​ошибку в будущем, метод отладки, который вы можете использовать, - это сократить строку до того, что работает и медленно добавлять данные, пока это не будет.