Hướng dẫn xml to json python - xml sang json python

Xin chào các bạn. Hôm nay mình sẽ giới thiệu với các bạn về việc Xử lý file JSOn và file XML trong Python

Xử lý file JSON

JSON là một trong những định dạng file trao đổi dữ liệu thông dụng nhất hiện nay. Với kiến trúc đơn giản và tương đồng với cấu trúc của Python nên việc thao tác JSON trên Python rất dễ hiểu.

Load file từ Internet

Thông thường dữ liệu JSON được lấy từ nguồn khác (như file, internet..) nên chương này sẽ bắt đầu bằng cách hướng dẫn download một file JSON từ Internet và sau đó mới parsing nội dung JSON download.

Sử dụng module urllib2 để download file và module json để encode/decode JSON data. Ví dụ:

import	urllib2
import	json
				
response	=	urllib2.urlopen('https://api.github.com/
users/voduytuan/repos')
				
data	=	json.load(response)
				
print	data

Ví dụ trên sẽ truy vấn đường dẫn https://api.github.com/users/voduytuan/repos để lấy danh sách Repository trên Github của mình dưới định dạng JSON.

Parsing JSON Data

Nếu như bạn đã có JSON data dưới dạng chuỗi, muốn parsing chuỗi này thành Data thì sử dụng như cách dưới đây:

import	json
mystring	=	'{"a":1,"b":2,"c":3,"d":4,"e":5}'
data	=	json.loads(mystring)
print	data
(Hiển	thị:	{u'a':	1,	u'c':	3,	u'b':	2,	u'e':	5,	u'd':	4})

Encoding JSON Data

Nếu như bạn đã có một biến và muốn encode thành JSON string thì có thể dùng theo cách sau:

import	json
				
mydata	=	{
				'name':	'John',
				'age':	10
}
jsonstring	=	json.dumps(mydata)
print	jsonstring				
(hiển	thị:	{"age":	10,	"name":	"John"})

Xử lý file XML

Trong phần này, chúng ta sẽ parsing nội dung XML thành dữ liệu để xử lý. Để xử lý XML, ta sẽ sử dụng thư viện Beautifulsoup 4. Đây là một thư viện giúp việc triển khai việc parsing html, xml được nhanh chóng và tiện lợi.

Cài đặt Beautifulsoup

Bạn có thể tham khảo hướng dẫn cách cài đặt tại website http://www.crummy.com/software/BeautifulSoup/bs4/doc/#insbeautiful-soup.

Trên MacOS, có thể cài bằng pip như sau:

$	sudo	pip	install	beautifulsoup4

Cài đặt import json mystring = '{"a":1,"b":2,"c":3,"d":4,"e":5}' data = json.loads(mystring) print data (Hiển thị: {u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}) 7 parser

Để parsing xml từ beautifulsoup, tao sử dụng bộ parser xml có tên là lxml . Xem hướng dẫn cài đặt tại http://www.crummy.com/software/BeautifulSoup/bs4/doc/#insa-parser

Trên MacOS, có thể cài bằng pip như sau:

sudo	pip	install	lxml

Cài đặt import json mystring = '{"a":1,"b":2,"c":3,"d":4,"e":5}' data = json.loads(mystring) print data (Hiển thị: {u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}) 7 parser

Để parsing xml từ beautifulsoup, tao sử dụng bộ parser xml có tên là lxml . Xem hướng dẫn cài đặt tại http://www.crummy.com/software/BeautifulSoup/bs4/doc/#insa-parser

from	bs4	import	BeautifulSoup	as	Soup
note	=	'''
<?xml	version="1.0"	encoding="UTF-8"?>
<breakfast_menu>
				<food>
								<name>Belgian	Waffles</name>
								<price>$5.95</price>
								<description>Two	of	our	famous	Belgian	Waff les	with	plenty	of	real	maple syrup	 
                                </description>

								<calories>650</calories>
				</food>
				<food>
								<name>Strawberry	Belgian	Waffles</name>
								<price>$7.95</price>
								<description>Light	Belgian	waffles	covered	with	strawberries	and	whipped	cream</description>
								<calories>900</calories>
				</food>
</breakfast_menu>
'''
				
soup	=	Soup(note,	'xml')
				
foods	=	soup.findAll('food')
				
for	x	in	foods:
				print	x.find('name').string,	':	',	x.price.string

Ví dụ về parsing XML

Belgian	Waffles	:		$5.95
Strawberry	Belgian	Waffles	:		$7.95		

Cho ví dụ sau:

Khi chạy thì sẽ hiển thị ra màn hình như sau:

  • Đối tượng thuộc class
    import	json
    mystring	=	'{"a":1,"b":2,"c":3,"d":4,"e":5}'
    data	=	json.loads(mystring)
    print	data
    (Hiển	thị:	{u'a':	1,	u'c':	3,	u'b':	2,	u'e':	5,	u'd':	4})
    
    8 (BeautifulSoup) sẽ giúp truy xuất các thành phần của file xml nhanh chóng và tiện lợi.
  • Trong ví dụ có một số cách truy xuất đến các phần tử như:
  • import	json
    mystring	=	'{"a":1,"b":2,"c":3,"d":4,"e":5}'
    data	=	json.loads(mystring)
    print	data
    (Hiển	thị:	{u'a':	1,	u'c':	3,	u'b':	2,	u'e':	5,	u'd':	4})
    
    9 : trả về mảng các thẻ có tên cần tìm

import json mydata = { 'name': 'John', 'age': 10 } jsonstring = json.dumps(mydata) print jsonstring (hiển thị: {"age": 10, "name": "John"}) 0 : trả về phần tử đầu tiên có tên cần tìm

Truy xuất trực tiếp thông qua tên thẻ như

import	json
				
mydata	=	{
				'name':	'John',
				'age':	10
}
jsonstring	=	json.dumps(mydata)
print	jsonstring				
(hiển	thị:	{"age":	10,	"name":	"John"})
1

soup	=	Soup(websitehtml,	'html')

Parsing HTML


Tương tự như import json mydata = { 'name': 'John', 'age': 10 } jsonstring = json.dumps(mydata) print jsonstring (hiển thị: {"age": 10, "name": "John"}) 2 , BeautifulSoup có thể parsing nội dung HTML thông qua hàm khởi tạo và chọn import json mydata = { 'name': 'John', 'age': 10 } jsonstring = json.dumps(mydata) print jsonstring (hiển thị: {"age": 10, "name": "John"}) 3 ở tham số thứ 2.

http://www.crummy.com/software/BeautifulSoup/bs4/doc/#insa-parser

http://www.crummy.com/software/BeautifulSoup/bs4/doc/#insbeautiful-soup.

Dưới đây mình đã giới thiệu với các bạn về Xử lý file JSOn và file XML trong Python và một số ví dụ cơ bản. Nếu có bất kì thắc mắc gì hãy để lại comment ở phía dưới nhé.

Hôm nay chúng ta sẽ học cách chuyển đổi XML thành JSON và XML thành Dict in Python. Chúng ta có thể sử dụng mô -đun Python

import	json
				
mydata	=	{
				'name':	'John',
				'age':	10
}
jsonstring	=	json.dumps(mydata)
print	jsonstring				
(hiển	thị:	{"age":	10,	"name":	"John"})
4 để đọc tệp XML và chuyển đổi nó thành dữ liệu Dict hoặc JSON. Chúng ta cũng có thể phát trực tuyến trên các tệp XML lớn và chuyển đổi chúng thành từ điển. Trước khi bước vào phần mã hóa, trước tiên, chúng ta hãy hiểu lý do tại sao chuyển đổi XML là cần thiết.

Chuyển đổi XML thành Dict/JSON

Các tệp XML đã dần trở nên lỗi thời nhưng có những hệ thống khá lớn trên web vẫn sử dụng định dạng này. XML nặng hơn JSON và vì vậy, hầu hết các nhà phát triển thích cái sau trong các ứng dụng của họ. Khi các ứng dụng cần hiểu XML được cung cấp bởi bất kỳ nguồn nào, đó có thể là một nhiệm vụ tẻ nhạt để chuyển đổi nó thành JSON. Mô -đun

import	json
				
mydata	=	{
				'name':	'John',
				'age':	10
}
jsonstring	=	json.dumps(mydata)
print	jsonstring				
(hiển	thị:	{"age":	10,	"name":	"John"})
4 trong Python làm cho nhiệm vụ này trở nên cực kỳ dễ dàng và đơn giản để thực hiện.

Bắt đầu với xmltodict

Chúng tôi có thể bắt đầu với mô -đun

import	json
				
mydata	=	{
				'name':	'John',
				'age':	10
}
jsonstring	=	json.dumps(mydata)
print	jsonstring				
(hiển	thị:	{"age":	10,	"name":	"John"})
4 nhưng chúng tôi cần cài đặt nó trước. Chúng tôi sẽ chủ yếu sử dụng PIP để thực hiện cài đặt.

Cài đặt mô -đun XMLTodict

Dưới đây là cách chúng tôi có thể cài đặt mô -đun XMLTodict bằng Chỉ số Gói Python (PIP):

pip install xmltodict

Điều này sẽ được thực hiện nhanh chóng vì

import	json
				
mydata	=	{
				'name':	'John',
				'age':	10
}
jsonstring	=	json.dumps(mydata)
print	jsonstring				
(hiển	thị:	{"age":	10,	"name":	"John"})
4 là một mô -đun trọng lượng rất nhẹ. Dưới đây là đầu ra cho bản cài đặt này: Điều tốt nhất về cài đặt này là mô-đun này không phụ thuộc vào bất kỳ mô-đun bên ngoài nào khác và vì vậy, nó có trọng lượng nhẹ và tránh mọi xung đột phiên bản. Chỉ để chứng minh, trên các hệ thống dựa trên Debian, mô -đun này có thể dễ dàng cài đặt bằng công cụ
import	json
				
mydata	=	{
				'name':	'John',
				'age':	10
}
jsonstring	=	json.dumps(mydata)
print	jsonstring				
(hiển	thị:	{"age":	10,	"name":	"John"})
8:
Hướng dẫn xml to json python - xml sang json python
The best thing about this installation was that this module is not dependent on any other external module and so, it is light-weight and avoids any version conflicts. Just to demonstrate, on Debian based systems, this module can be easily installed using the
import	json
				
mydata	=	{
				'name':	'John',
				'age':	10
}
jsonstring	=	json.dumps(mydata)
print	jsonstring				
(hiển	thị:	{"age":	10,	"name":	"John"})
8 tool:

sudo apt install python-xmltodict

Một điểm cộng nữa là mô -đun này có gói Debian chính thức.

Python xml to json

Nơi tốt nhất để bắt đầu thử mô -đun này sẽ là thực hiện một thao tác được thực hiện để thực hiện chủ yếu, để thực hiện chuyển đổi XML sang JSON. Hãy cùng nhìn vào một đoạn mã về cách thực hiện điều này:

import	json
mystring	=	'{"a":1,"b":2,"c":3,"d":4,"e":5}'
data	=	json.loads(mystring)
print	data
(Hiển	thị:	{u'a':	1,	u'c':	3,	u'b':	2,	u'e':	5,	u'd':	4})
0

Hãy cùng xem đầu ra cho chương trình này: Ở đây, chúng tôi chỉ cần sử dụng chức năng

import	json
				
mydata	=	{
				'name':	'John',
				'age':	10
}
jsonstring	=	json.dumps(mydata)
print	jsonstring				
(hiển	thị:	{"age":	10,	"name":	"John"})
9 để chuyển đổi dữ liệu XML thành JSON và sau đó chúng tôi sử dụng mô -đun
$	sudo	pip	install	beautifulsoup4
0 để in JSON ở định dạng tốt hơn.
Hướng dẫn xml to json python - xml sang json python
Here, we simply use the
import	json
				
mydata	=	{
				'name':	'John',
				'age':	10
}
jsonstring	=	json.dumps(mydata)
print	jsonstring				
(hiển	thị:	{"age":	10,	"name":	"John"})
9 function to convert XML data to JSON and then we use the
$	sudo	pip	install	beautifulsoup4
0 module to print JSON in a better format.

Chuyển đổi tệp XML thành JSON

Giữ dữ liệu XML trong bản thân mã không phải lúc nào cũng không thể thực tế. Thông thường, chúng tôi giữ dữ liệu của chúng tôi trong cơ sở dữ liệu hoặc một số tệp. Chúng tôi có thể trực tiếp chọn các tập tin và chuyển đổi chúng thành JSON là tốt. Hãy cùng xem một đoạn mã cách chúng ta có thể thực hiện chuyển đổi với tệp XML:

import	json
mystring	=	'{"a":1,"b":2,"c":3,"d":4,"e":5}'
data	=	json.loads(mystring)
print	data
(Hiển	thị:	{u'a':	1,	u'c':	3,	u'b':	2,	u'e':	5,	u'd':	4})
1

Hãy cùng xem đầu ra cho chương trình này: Ở đây, chúng tôi đã sử dụng một mô -đun khác pprint để in đầu ra theo cách định dạng. Ngoài ra, sử dụng hàm

$	sudo	pip	install	beautifulsoup4
1 rất đơn giản, chúng tôi đã sử dụng nó nhận được một mô tả tệp và sau đó phân tích tệp vào một đối tượng JSON.
Hướng dẫn xml to json python - xml sang json python
Here, we used another module pprint to print the output in a formatted manner. Apart from that, using the
$	sudo	pip	install	beautifulsoup4
1 function was straightforward, we used it get a File descriptor and then parsed the file into a JSON object.

Python xml để dict

Như tên mô -đun đề xuất, XMLTodict thực sự chuyển đổi dữ liệu XML mà chúng tôi cung cấp chỉ cho một từ điển Python đơn giản. Vì vậy, chúng tôi chỉ có thể truy cập dữ liệu với các khóa từ điển là tốt. Đây là một chương trình mẫu:

import	json
mystring	=	'{"a":1,"b":2,"c":3,"d":4,"e":5}'
data	=	json.loads(mystring)
print	data
(Hiển	thị:	{u'a':	1,	u'c':	3,	u'b':	2,	u'e':	5,	u'd':	4})
2

Hãy cùng xem đầu ra cho chương trình này: Vì vậy, các thẻ có thể được sử dụng làm khóa cùng với các khóa thuộc tính. Các khóa thuộc tính chỉ cần được đặt tiền tố với biểu tượng

$	sudo	pip	install	beautifulsoup4
2.
Hướng dẫn xml to json python - xml sang json python
So, the tags can be used as the keys along with the attribute keys as well. The attribute keys just need to be prefixed with the
$	sudo	pip	install	beautifulsoup4
2 symbol.

Hỗ trợ các không gian tên trong XML

Trong dữ liệu XML, chúng ta thường có một tập hợp các không gian tên xác định phạm vi của dữ liệu được cung cấp bởi tệp XML. Trong khi chuyển đổi sang định dạng JSON, thì điều cần thiết là các không gian tên này cũng vẫn tồn tại ở định dạng JSON. Hãy để chúng tôi xem xét tệp XML mẫu này:

import	json
mystring	=	'{"a":1,"b":2,"c":3,"d":4,"e":5}'
data	=	json.loads(mystring)
print	data
(Hiển	thị:	{u'a':	1,	u'c':	3,	u'b':	2,	u'e':	5,	u'd':	4})
3

Dưới đây là một chương trình mẫu về cách chúng ta có thể bao gồm các không gian tên XML ở định dạng JSON:

import	json
mystring	=	'{"a":1,"b":2,"c":3,"d":4,"e":5}'
data	=	json.loads(mystring)
print	data
(Hiển	thị:	{u'a':	1,	u'c':	3,	u'b':	2,	u'e':	5,	u'd':	4})
4

Hãy cùng xem đầu ra cho chương trình này:

Hướng dẫn xml to json python - xml sang json python

JSON sang XML chuyển đổi

Mặc dù chuyển đổi từ XML sang JSON là mục tiêu chính của mô -đun này, XMLTodict cũng hỗ trợ thực hiện thao tác ngược, chuyển đổi JSON thành dạng XML. Chúng tôi sẽ cung cấp dữ liệu JSON trong chính chương trình. Đây là một chương trình mẫu:

import	json
mystring	=	'{"a":1,"b":2,"c":3,"d":4,"e":5}'
data	=	json.loads(mystring)
print	data
(Hiển	thị:	{u'a':	1,	u'c':	3,	u'b':	2,	u'e':	5,	u'd':	4})
5

Hãy cùng xem đầu ra cho chương trình này: Xin lưu ý rằng việc cung cấp một khóa JSON duy nhất là cần thiết để việc này hoạt động chính xác. Nếu chúng tôi xem xét rằng chúng tôi sửa đổi chương trình của mình để chứa nhiều khóa JSON ở cấp độ đầu tiên của dữ liệu như:

Hướng dẫn xml to json python - xml sang json python
Please note that giving a single JSON key is necessary for this to work correctly. If we consider that we modify our program to contain multiple JSON keys at the very first level of data like:

import	json
mystring	=	'{"a":1,"b":2,"c":3,"d":4,"e":5}'
data	=	json.loads(mystring)
print	data
(Hiển	thị:	{u'a':	1,	u'c':	3,	u'b':	2,	u'e':	5,	u'd':	4})
6

Trong trường hợp này, chúng tôi có ba phím ở cấp độ gốc. Nếu chúng ta cố gắng không phân chia hình thức JSON này, chúng ta sẽ phải đối mặt với lỗi này: Điều này xảy ra vì xmltodict cần xây dựng JSON với khóa đầu tiên là thẻ XML gốc. Điều này có nghĩa là chỉ nên có một khóa JSON duy nhất ở cấp độ gốc của dữ liệu.

Hướng dẫn xml to json python - xml sang json python
This happens because xmltodict needs to construct the JSON with the very first key as the root XML tag. This means that there should only be a single JSON key at the root level of data.

Sự kết luận

Trong bài học này, chúng tôi đã nghiên cứu một mô-đun Python tuyệt vời có thể được sử dụng để phân tích và chuyển đổi XML thành JSON và ngược lại. Chúng tôi cũng đã học cách chuyển đổi XML thành Dict bằng mô -đun XMLTodict. Tham khảo: API Doc