Преобразование в JSON JSONP в: это регулярное выражение правильно?


- Я готовлю строку, JSONP и хотите преобразовать его в JSON.

Я использую следующее регулярное выражение для сопоставления (для удаления) обивка на JSON.

([a-zA-Z_0-9\.]*\()|(\);?$)

В Python, вот эти строчки я использую для преобразования в JSON JSONP в:

apijson = re.sub(r'([a-zA-Z_0-9\.]*\()|(\);?$)','',jsonp)

Есть все, что я должен беспокоиться о том, используя это регулярное выражение? Любой шанс, я мог бы в конечном итоге коверкая в JSON?



6692
6
задан 23 мая 2011 в 12:05 Источник Поделиться
Комментарии
2 ответа

Проблема с этот код, что не выразить то, что вы пытаетесь сделать:

apijson = re.sub(r'([a-zA-Z_0-9\.]*\()|(\);?$)','',jsonp)

Код, как представляется, указывают на то, что вы пытаетесь найти и заменить многих случаях некоторые регулярные выражения внутри строки. Однако, вы действительно пытается лишить части от начала и конца. Я тоже не фанат регулярных выражений, потому что они обычно довольно плотные и трудно читать. Иногда они являются удивительными, но это не тот случай.

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

Кроме того, я думаю, что в JSON-P позволяет функции, такие как альфа - ["бета"] который не вписывается в ваше регулярное выражение. Кроме того, что о дополнительных пробелов или комментариев?

Я бы предложил делать что-то вроде:

   apijson = jsonp[ jsonp.index("(") + 1 : jsonp.rindex(")") ]

Таким образом, вы более четко обнажая все, за исключением первой и последней скобки.

8
ответ дан 23 мая 2011 в 01:05 Источник Поделиться

Вы можете просто нарезать JSONP в текст, чтобы удалить первоначального заполнения и заканчивая кронштейн, сделав что-то вроде этого:

jsonp_data = "callbackfunc({'count':2345, 'url':"http://stackoverflow.com/})"

jsonp_data[len('callbackfunc('):-1]

Это позволит легко удалить прокладку. Как и в большинстве случаев, вы могли бы просто называя некоторые API, то этот метод может быть лучше, как API всегда возвращает одну строку. Если ваш ответ JSONP в строку обивка меняется каждый раз, то вам лучше написать несколько регулярных выражений.

1
ответ дан 9 января 2014 в 09:01 Источник Поделиться