Python의 Json_python 구문 분석에 대한 심층적인 이해

不言
풀어 주다: 2018-04-02 17:26:05
원래의
1441명이 탐색했습니다.

Json은 가볍고 쓰기 쉬운 특성으로 인해 일반적으로 사용되는 데이터 교환 구조입니다. 다음 글에서는 Python의 Json 파싱 관련 정보를 주로 소개합니다. 도움이 필요한 친구들이 참고할 수 있습니다.

JSON 소개

JSON(JavaScript Object Notation)은 가벼운 데이터 교환 형식입니다. 이는 JavaScript(표준 ECMA-262 3판 - 1999년 12월)의 하위 집합을 기반으로 합니다. JSON은 완전히 언어 독립적인 텍스트 형식을 사용하지만 C 언어 계열(C, C++, C#, Java, JavaScript, Perl, Python 등 포함)과 유사한 규칙도 사용합니다. 이러한 속성은 JSON을 이상적인 데이터 교환 언어로 만듭니다. 사람이 읽고 쓰기 쉽고, 기계가 구문 분석하고 생성하기도 쉽습니다.

형식은 일반적으로 다음과 같습니다.

객체는 "이름/값 쌍"의 순서가 지정되지 않은 모음입니다. 객체는 "{"(왼쪽 대괄호)로 시작하고 "}"(오른쪽 대괄호)로 끝납니다. 각 "이름" 뒤에는 ":"(콜론)이 옵니다. "이름/값" 쌍은 ","(쉼표)로 구분됩니다.

예:


{"b": "Hello", "c": null, "a": true}
로그인 후 복사


해당 값은 문자열, 숫자, true, false, null, 개체 또는 큰따옴표(배열)로 묶인 배열일 수 있습니다. 이러한 구조는 중첩될 수 있습니다.


값은 문자열, 숫자, true, false, null, 개체 또는 큰따옴표로 묶인 배열일 수 있습니다. 이러한 구조는 중첩될 수 있습니다.

Python을 사용하여 Json 인코딩 및 구문 분석

Python에는 json 작업을 완료하는 데 도움이 되는 내장 json 패키지가 있습니다.

Python의 사전 구조를 json으로 내보내려면 json.dumps()를 사용하세요. json을 Python의 사전 구조로 읽으려면 json.loads() 를 사용하세요. json.dumps() ,将json读成Python的字典结构,使用json.loads()

如果不是针对string操作而是对文件操作,分别使用json.load()函数和json.dump()函数。


import json
 
data = {
 'name' : 'ACME',
 'shares' : 100,
 'price' : 542.23
}
 
json_str = json.dumps(data)
data = json.loads(json_str)
 
# Writing JSON data to file
with open('data.json', 'w') as f:
 json.dump(data, f)
 
# Reading data back
with open('data.json', 'r') as f:
 data = json.load(f)
로그인 후 복사


默认的类型对应如下:


JSONPython
objectdict
arraylist
stringunicode
number (int)int, long
number (real)float
trueTrue
falseFalse
nullNone

其他数据类型与Json之间的编码和解码

一般来说,Python对json的解析是list或dict之间的操作,如果需要其他类型与json之间转换,就需要object_hook参数。先定义一个类,将类的字典初始化成json的key-value键值对。这样,json的参数就变成了类的属性。

将一个JSON字典转换为一个Python对象Python


>>> class JSONObject:
...  def __init__(self, d):
...   self.__dict__ = d
...
>>>
>>> data = json.loads(s, object_hook=JSONObject)
>>> data.name
'ACME'
>>> data.shares
50
>>> data.price
490.1
로그인 후 복사


还可以通过指定“函数”来进行转换。

用函数来指定序列化的方法,即将对象的“属性-值”对变成字典对,函数返回一个字典,然后json.dumps会格式化这个字典。

如果是通过函数将json变成对象,首先获得类名,然后通过__new__

문자열 연산이 아닌 파일 연산이라면 json.load() 함수와 json.dump() 함수를 각각 사용하세요.

def serialize_instance(obj):
 d = { '__classname__' : type(obj).__name__ }
 d.update(vars(obj))
 return d
 
# Dictionary mapping names to known classes
classes = {
 'Point' : Point
}
 
def unserialize_object(d):
 clsname = d.pop('__classname__', None)
 if clsname:
  cls = classes[clsname]
  obj = cls.__new__(cls) # Make instance without calling __init__
  for key, value in d.items():
   setattr(obj, key, value)
  return obj
 else:
  return d
로그인 후 복사



기본 유형은 다음과 같습니다.

< td> 없음
JSON Python
객체dict
배열< /td >목록
문자열유니코드
숫자(int) int, long
숫자(실수)float
true< /td >
거짓거짓
null


다른 데이터 유형과 Json 간의 인코딩 및 디코딩


일반적으로 Python의 json 구문 분석은 list 또는 dict 작업 사이에서 수행됩니다. 다른 유형과 json 간에 변환해야 하는 경우 object_hook 매개변수가 필요합니다. 먼저 클래스를 정의하고 클래스 사전을 json 키-값 쌍으로 초기화합니다. 이런 방식으로 json의 매개변수는 클래스의 속성이 됩니다.

JSON 사전을 Python 객체 Python으로 변환

>>> p = Point(2,3)
>>> s = json.dumps(p, default=serialize_instance)
>>> s
&#39;{"__classname__": "Point", "y": 3, "x": 2}&#39;
>>> a = json.loads(s, object_hook=unserialize_object)
>>> a
<__main__.Point object at 0x1017577d0>
>>> a.x
2
>>> a.y
3
로그인 후 복사

"함수"를 지정하여 변환을 수행할 수도 있습니다.

함수를 사용하여 직렬화 방법을 지정합니다. 즉, 객체의 "속성-값" 쌍을 사전 쌍으로 변환합니다. 이 함수는 사전을 반환한 다음 json.dumps가 형식을 지정합니다. 사전.


json을 객체로 변환하는 함수를 사용하는 경우 먼저 클래스 이름을 가져온 다음 __new__를 통해(초기화 함수 호출 없이) 객체를 생성한 다음 json 사전의 각 속성을 할당합니다. 개체에.


함수를 사용하여 json 변환 방법 Python을 지정하세요

rrreee🎜🎜🎜🎜🎜사용 방법은 다음과 같습니다. 🎜🎜🎜🎜🎜rrreee🎜🎜🎜🎜관련 권장 사항: 🎜 🎜자세한 설명 Python의 JSON 구문 분석🎜🎜🎜 🎜Json 문자열을 판단하는 Python의 예🎜🎜🎜🎜json의 Python 작업 요약에 대한 심층적인 이해🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜

위 내용은 Python의 Json_python 구문 분석에 대한 심층적인 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!