기계는 거짓말하지 않는다

Python JSON 문자열이 포함된 문자열, output string(stdout)을 JSON 객체로 파싱(parsing) 본문

Python

Python JSON 문자열이 포함된 문자열, output string(stdout)을 JSON 객체로 파싱(parsing)

KillinTime 2024. 1. 1. 19:05

Python에서 stdout이 JSON 형식의 문자열이거나 문자열 내부에

JSON 문자열이 포함되어 있을 경우 파싱 하는 함수이다.

여러 케이스에 대하여 검증되지는 않았다.

import json

def extract_json_strings(input_string):
    json_strings = []
    start_brace_index = -1
    end_brace_index = -1
    open_brace_count = 0
    close_brace_count = 0
    
    for i, char_ in enumerate(input_string):
      if char_ == '{':
        open_brace_count += 1
        if open_brace_count == 1:
          start_brace_index = i
        
      if char_ == '}' and open_brace_count >= 1:
        close_brace_count += 1
        end_brace_index = i
        if open_brace_count == close_brace_count:
          json_strings.append(input_string[start_brace_index:end_brace_index + 1])
          
          start_brace_index = -1
          end_brace_index = -1
          open_brace_count = 0
          close_brace_count = 0
          
    if open_brace_count >= 1 and close_brace_count != 0 and close_brace_count < open_brace_count:
      json_strings.append(input_string[start_brace_index:end_brace_index + 1])

    # 추출된 문자열 파싱, JSON 객체 변환
    json_objects = [json.loads(json_str) for json_str in json_strings]

    return json_objects

contain_json_string = """
MESSAGE1
{
    "name": "temp1",
    "id": 2,
    "message": "temp message",
    "temp_dict": {
        "a": 1,
        "b": 2
    }
}
MESSAGE2
"""

result = extract_json_strings(contain_json_string)

print(result)

결과

 

Comments