Извлечение Json объектов из строки - PullRequest
0 голосов
/ 05 марта 2020

Допустим, у меня есть входящая строка oversocket, и она выглядит следующим образом

'text ..... text {"foo": {"bar": 100}} text {"bar ": 2} test {" foo "'

Каков наилучший способ / библиотека для извлечения только объектов json из входящей строки?

Я пробовал simple json .JSONDecoder из simple json library. Тем не менее, это не только поиск предметов или я не знал, как его использовать.

Я пробовал что-то подобное до сих пор

import simplejson as json
input_buffer = ""
def in_data(data):
    input_buffer += data
    try:
        dict, idx = json.JSONDecoder().raw_decode(input_buffer)
    except:
        #handle exception in case nothing found 
    self.handle_input(dict) #send the dictionary for processing
    input_buffer = input_buffer[idx:]

1 Ответ

1 голос
/ 05 марта 2020

Чистое python решение, основанное на простом подсчете скобок и try для анализа собранного текста.

import json

inp = list(r'text {"foo": {"bar":100}} text {"bar":2} test ')
stack = ''
bracket_counter = 0
jsons = []

while inp:
    char = inp.pop(0)
    if char == '{':
        bracket_counter += 1

    if bracket_counter:
        stack += char

    if char == '}':
        bracket_counter -= 1
        if bracket_counter == 0:
            try:
                parsed = json.loads(stack)
                jsons.append(parsed)
            except json.JSONDecodeError:
                pass
            stack = ''

print(jsons)  # -> [{'foo': {'bar': 100}}, {'bar': 2}]
...