본문 바로가기
파이썬

파이썬 다차원 Json 배열을 Python으로 구문 분석

by º기록 2021. 2. 6.
반응형

나는 처음으로 JSON을 구문 분석하고 다차원 배열을 처리하려고 머리를 숙이고 있습니다.

{
  "secret": "[Hidden]",
  "minutes": 20,
  "link": "http:\/\/www.1.com",
  "bookmark_collection": {
    "free_link": {
      "name": "#free_link#",
      "bookmarks": [
        {
          "name": "1",
          "link": "http:\/\/www.1.com"
        },
        {
          "name": "2",
          "link": "http:\/\/2.dk"
        },
        {
          "name": "3",
          "link": "http:\/\/www.3.in"
        }
      ]
    },
    "boarding_pass": {
      "name": "Boarding Pass",
      "bookmarks": [
        {
          "name": "1",
          "link": "http:\/\/www.1.com\/"
        },
        {
          "name": "2",
          "link": "http:\/\/www.2.com\/"
        },
        {
          "name": "3",
          "link": "http:\/\/www.3.hk"
        }
      ]
    },
    "sublinks": {
      "name": "sublinks",
      "link": [
        "http:\/\/www.1.com",
        "http:\/\/www.2.com",
        "http:\/\/www.3.com"
      ]
    }
  }
}

이것은 세 부분으로 나뉩니다. 첫 번째 차원의 정적 데이터 (비밀, 분, 링크)는 별도의 문자열로 가져와야합니다.

그런 다음 고정 된 이름이없는 "책갈피 모음"별로 사전이 필요하므로 이름과 각 책갈피의 링크 / 이름이 필요합니다.

그런 다음 항상 동일한 별도의 하위 링크가 있으며 별도의 사전에 모든 링크가 필요합니다.

JSON 구문 분석에 대해 읽고 있지만 내가 찾은 대부분의 항목은 하나의 사전에 넣은 간단한 배열입니다. 누구든지 이것을 할 좋은 기술이 있습니까?

 

해결 방법

 

JSON을 파싱하면 Python dict가 생성됩니다. 따라서 위의 JSON이 input_data라는 문자열에 있다고 가정합니다.

import json
# This converts from JSON to a python dict
parsed_input = json.loads(input_data)

# Now, all of your static variables are referenceable as keys:
secret = parsed_input['secret']
minutes = parsed_input['minutes']
link = parsed_input['link']

# Plus, you can get your bookmark collection as:
bookmark_collection = parsed_input['bookmark_collection']

# Print a list of names of the bookmark collections...
print bookmark_collection.keys() # Note this contains sublinks, so remove it if needed

# Get the name of the Boarding Pass bookmark:
print bookmark_collection['boarding_pass']['name']

# Print out a list of all bookmark links as:
#  Boarding Pass
#    * 1: http://www.1.com/
#    * 2: http://www.2.com/
#  ...
for bookmark_definition in bookmark_collection.values():
    # Skip sublinks...
    if bookmark_definition['name'] == 'sublinks':
        continue
    print bookmark_definition['name']
    for bookmark in bookmark_definition['bookmarks']:
        print "    * %(name)s: %(link)s" % bookmark

# Get the sublink definition:
sublinks = parsed_input['bookmark_collection']['sublinks']

# .. and print them
print sublinks['name']
for link in sublinks['link']:
    print '  *', link

 

참조 페이지 https://stackoverflow.com/questions/12344332

 

 

반응형

댓글