Python에서 JSON 데이터로 재생

머리말

이 기사의 글과 사진은 인터넷에서 가져온 것으로 학습 및 커뮤니케이션 목적으로 만 사용되며 상업적인 용도는 없습니다. 문의 사항이있는 경우 처리를 위해 당사에 문의하시기 바랍니다.

추신 : Python 학습 자료가 필요한 경우 아래 링크를 클릭하여 직접 얻을 수 있습니다.

Python 무료 학습 자료 및 그룹 커뮤니케이션 답변 가입하려면 클릭하세요


JSON 형식은 웹 크롤링 및 데이터 전송에서 자주 접하는 텍스트 형식입니다. 오늘 우리는 파이썬에서 JSON 데이터를 처리하는 방법에 대해 이야기 할 것입니다.

 

Json 소개

Json (JavaScript Object Notation)

많은 웹 사이트에서 데이터 전송 및 교환을 위해 Json 형식을 사용합니다. 이전에 NetEase Cloud Music API API를 게시 한 것처럼  반환되는 데이터는 모두 Json 형식입니다.


이는 Json이 간단한 데이터 형식, 읽기 및 쓰기 쉽고 이해하기 쉬운 등 많은 장점이있는 경량 데이터 교환 형식이기 때문입니다. 프런트 엔드와 백 엔드 간의 데이터 전송에 사용하면 서버와 클라이언트의 개발 워크로드가 크게 간소화됩니다.

 

그리고 XML에 비해 더 가볍고 구문 분석하기 쉽습니다.

Json에서는 "키-값"접근 방식을 따릅니다.

예를 들어, 가장 간단한 "{"name ":"zhuxiao5 "}"는 python의 사전과 유사하며 Json 형식의 데이터이기도합니다.

다음과 같이 좀 더 복잡합니다 (이 예제는 나중에 여러 번 사용됩니다).

{
    "animals": {
        "dog": [
            {
                "name": "Rufus",
                "age":15
            },
            {
                "name": "Marty",
                "age": null
            }
        ]
    }
}

위의 사진을 예로 들어 Json 형식의 특성에 대해 이야기 해 봅시다.

  • 객체는 키-값 쌍으로 표시됩니다.
  • 키는 큰 따옴표, 콜론 ":", 키 값으로 둘러싸여 있습니다.
  • 값은 문자열, 숫자, 배열 및 기타 데이터 유형이 될 수 있습니다.
  • 쉼표로 개체를 구분하십시오.
  • "{}"는 객체를 표현하는 데 사용됩니다.
  • "[]"는 배열을 표현하는 데 사용됩니다.

Python의 Json 모듈

파이썬은 또한 자체 Json 모듈과 함께 제공되며, 그중 json.dumps () 및 json.loads ()가 더 일반적으로 사용됩니다.

json.dumps ()는 파이썬 객체를 json으로 변환합니다.

json.loads ()는 json을 파이썬 객체로 변환합니다.

 

#json.dumps(),json.loads()
import json
dict_data = {"a": 1, "b": 2}
# 将dict格式数据转换成json格式字符串
dump_data = json.dumps(dict_data)
# 将json格式字符串转换成对应的python值
load_data = json.loads(dump_data)
# 打印转换结果
print(type(dict_data),dict_data)
print(type(dump_data),dump_data)
print(type(load_data),load_data)

작업 결과 :

<class 'dict'> {'a': 1, 'b': 2}
<class 'str'>   {"a": 1, "b": 2}
<class 'dict'> {'a': 1, 'b': 2}

예제에서 처음에있는 dict_data 변수는 딕셔너리이고 json.dumps () 이후 dict 형식 데이터는 json 형식 문자열로 변환됩니다. 지금은 모두 { 'a': 1, 'b': 2}이지만 형식이 다릅니다. 그런 다음 json.loads ()를 통해 json 형식 문자열이 다시 사전으로 변환됩니다.

Json 온라인 구문 분석

실제 응용에서 json 데이터를 추출하려면 반환 된 json 데이터의 구조를 이해해야합니다.

그러나 Json 형식의 데이터는 종종 이와 같습니다.

 

 

 

걱정하지 마세요. 데이터를 일부 json 플러그인에 복사하거나 온라인으로 구문 분석 할 수 있습니다.

예를 들어,이 플러그인 :

 

 

이제 방금 URL을 엽니 다.

 


더 명확합니까?

파이썬을 사용하여 데이터를 내부로 가져 오면 어떨까요?

먼저 json.loads ()를 사용하여 Json을 사전으로 변환 한 다음 원하는 목록 객체를 얻을 때까지 get () 함수를 사용한 다음 목록의 데이터에 대해 for 루프를 사용할 수 있습니다 ~

어, 약간 감기 네요.

 

 

여전히 기사의 시작 부분에있는 예제에서, 우리는 그 안에있는 모든 개의 이름을 얻고 싶습니다.

{
    "animals": {
        "dog": [
            {
                "name": "Rufus",
                "age":15
            },
            {
                "name": "Marty",
                "age": null
            }
        ]
    }
}

우리는 할 수있어:

load_data = json.loads(dump_data)
data = load_data.get("animals").get("dog")
result1 = []
for i in data:
    result1.append(i.get("name"))
print(result1)

작업 결과 :

['Rufus', 'Marty']

이것은 실제로 우리가 원하는 결과를 얻을 수 있습니다.

추신 : https://www.json.cn 과 같은 유사한 온라인 분석 웹 사이트가 많이  있습니다 .

JsonPath

아직도 기억하는지 모르겠습니다. 처음에 Json을 소개했을 때 XML보다 더 가볍고 파싱하기 쉽다고 말했습니다.

XML 사람들이 XPATH를 가지고 있기 때문에 Json과 유사한 도구가 있습니까?

 

 

JsonPath는 Json 문서에서 지정된 정보를 추출하는 도구 인 정보 추출 클래스 라이브러리입니다.

Json 용 JsonPath는 XML 용 XPATH와 동일합니다.

Json은 명확한 구조, 높은 가독성, 낮은 복잡성을 가지고 있으며 일치하기가 매우 쉽습니다. 다음 표는 JsonPath의 사용법을 보여줍니다.

 

 

 

맞습니다, 이것은 동일한 예입니다. 이번에는 JsonPath를 사용하여 모든 개의 이름을 가져 오려고합니다.

{
    "animals": {
        "dog": [
            {
                "name": "Rufus",
                "age":15
            },
            {
                "name": "Marty",
                "age": null
            }
        ]
    }
}

우리는 할 수있어:

load_data = json.loads(dump_data)
jobs=load_data['animals']['dog']
result2 = []
for i in data:
# 从根节点开始,匹配name节点
    result2.append(jsonpath.jsonpath(i,'$..name')[0])
print(result2)

$ .. name은 이름 노드와 일치하는 루트 노드에서 시작하는 것을 나타냅니다.

작업 결과 :

['Rufus', 'Marty']

JsonPath를 사용하면 원하는 결과를 얻을 수도 있습니다.

계속해서 JsonPath를 사용하여 후속 예제 연습에서 데이터를 추출 할 것입니다.

예제 연습

예 :  NetEase Cloud Music Review API  를 사용하여 Json 데이터를 생성하고 여기에서 핫 리뷰 데이터를 가져옵니다.

http://music.163.com/api/v1/resource/comments/R_SO_4_483671599?limit=10&offset=0

브라우저에서 엽니 다 (Json 구문 분석 플러그인이 설치됨).

 

 

빨간색 영역의 데이터는 이번에 얻고 자하는 데이터입니다.

 

def get_comments(url):
    data = []
    doc = get_json(url)
    jobs=doc['hotComments']
    for job in jobs:
        dic = {}
        #从根节点开始,匹配content节点
        dic['content']=jsonpath.jsonpath(job,'$..content')[0] #评论
        dic['time']= stampToTime(jsonpath.jsonpath(job,'$..time')[0]) #时间
        dic['userId']=jsonpath.jsonpath(job['user'],'$..userId')[0]  #用户ID
        dic['nickname']=jsonpath.jsonpath(job['user'],'$..nickname')[0]#用户名
        dic['likedCount']=jsonpath.jsonpath(job,'$..likedCount')[0] #赞数
        data.append(dic)
    return pd.DataFrame(data)

final_result = get_comments('http://music.163.com/api/v1/resource/comments/R_SO_4_483671599?limit=10&offset=0')

작업 결과 :

 

성공적으로 획득 √

이 글이 앞으로 모든 사람들이 Json 데이터를 더 쉽게 플레이 할 수 있도록 해주기를 바랍니다 ~

추천

출처blog.csdn.net/pythonxuexi123/article/details/113060197