Đây có thể không phải là quá trình hiệu quả nhất, nhưng nó hoạt động. Tôi đã sao chép mẫu đó vào một tệp có tên json.txt
, sau đó đọc nó, giải phóng nó bằng json.loads[]
và sử dụng một cặp chức năng để làm sạch đệ quy và mọi thứ bên trong nó.
import json
def clean_dict[d]:
for key, value in d.iteritems[]:
if isinstance[value, list]:
clean_list[value]
elif isinstance[value, dict]:
clean_dict[value]
else:
newvalue = value.strip[]
d[key] = newvalue
def clean_list[l]:
for index, item in enumerate[l]:
if isinstance[item, dict]:
clean_dict[item]
elif isinstance[item, list]:
clean_list[item]
else:
l[index] = item.strip[]
# Read the file and send it to the dict cleaner
with open["json.txt"] as f:
data = json.load[f]
print "before..."
print data, "\n"
clean_dict[data]
print "after..."
print data
Kết quả...
before...
{u'anotherName': [{u'anArray': [{u'anotherKey': u' value', u'key': u' value\n\n'}, {u'anotherKey': u'value', u'key': u' value\n'}]}], u'name': [{u'someKey': u'\n\n some Value '}, {u'someKey': u'another value '}]}
after...
{u'anotherName': [{u'anArray': [{u'anotherKey': u'value', u'key': u'value'}, {u'anotherKey': u'value', u'key': u'value'}]}], u'name': [{u'someKey': u'some Value'}, {u'someKey': u'another value'}]}
JSON không cho phép bình luận theo thiết kế. Như được giải thích bởi người tạo ra Douglas Crockford.
Tôi đã loại bỏ các bình luận khỏi JSON vì tôi thấy mọi người đang sử dụng chúng để giữ các chỉ thị phân tích cú pháp, một thực tế sẽ phá hủy khả năng tương tác.
Nhưng ông cũng tuyên bố rằng bạn có thể sử dụng các công cụ bên ngoài hoặc tích hợp để các tệp JSON phân chia trước và xóa bất kỳ nhận xét nào trước khi phân tích cú pháp thực tế diễn ra.
Trong bài viết ngắn này, chúng tôi sẽ xem cách bạn có thể xóa nhận xét khỏi các tệp JSON bằng mã Python.
Cách đọc các tệp JSON với Python
Đầu tiên, chúng ta cần có khả năng đọc các tệp JSON trong mã Python của mình:
import json
with open['example.json'] as json_file:
data = json.load[json_file]
print[data]
Cách xóa nhận xét khỏi tệp JSON của bạn
Có nhiều cách giải quyết khác nhau được sử dụng bởi các nhà phát triển để thêm nhận xét vào các tệp JSON nói chung.
Bạn có thể sử dụng các nhận xét kiểu JS [dòng //
và Multiline /* .. */
] trong các tệp JSON của bạn và phân chia trước chúng bằng mã Python của bạn để xóa các nhận xét trước khi đọc chúng theo cách trước:
import json
with open['data.json', 'r'] as jsonfile:
jsondata = ''.join[line for line in jsonfile if not line.startswith['//']]
data = json.loads[jsondata]
print[data]
Bạn cũng có thể sử dụng các gói bên ngoài như:
- JSON-Minify: Một cổng của tiện ích JSON-Minify đến ngôn ngữ Python để thu nhỏ các khối nội dung giống JSON thành JSON hợp lệ bằng cách loại bỏ tất cả các nhận xét theo kiểu Whitespace và JS [dòng đơn // và đa dòng /* .. */]. Với JSON-Minify, bạn có thể duy trì các tài liệu JSON thân thiện với nhà phát triển, nhưng thu nhỏ chúng trước khi phân tích hoặc truyền chúng qua dây. Có thể được cài đặt bằng lệnh
0,before... {u'anotherName': [{u'anArray': [{u'anotherKey': u' value', u'key': u' value\n\n'}, {u'anotherKey': u'value', u'key': u' value\n'}]}], u'name': [{u'someKey': u'\n\n some Value '}, {u'someKey': u'another value '}]} after... {u'anotherName': [{u'anArray': [{u'anotherKey': u'value', u'key': u'value'}, {u'anotherKey': u'value', u'key': u'value'}]}], u'name': [{u'someKey': u'some Value'}, {u'someKey': u'another value'}]}
- Nhận xétJSON: Gói Python giúp bạn tạo các tệp JSON với các bình luận nội tuyến kiểu Python và JavaScript. API của nó rất giống với mô -đun JSON của Thư viện tiêu chuẩn Python. Bạn có thể cài đặt nó bằng lệnh
1.before... {u'anotherName': [{u'anArray': [{u'anotherKey': u' value', u'key': u' value\n\n'}, {u'anotherKey': u'value', u'key': u' value\n'}]}], u'name': [{u'someKey': u'\n\n some Value '}, {u'someKey': u'another value '}]} after... {u'anotherName': [{u'anArray': [{u'anotherKey': u'value', u'key': u'value'}, {u'anotherKey': u'value', u'key': u'value'}]}], u'name': [{u'someKey': u'some Value'}, {u'someKey': u'another value'}]}
Đây là một ví dụ sử dụng:
import commentjson
with open['data.json', 'r'] as file:
ata = commentjson.load[file]
print[data]
Đây là một ví dụ khác từ các tài liệu:
>>> import commentjson
>>>
>>> json_string = """{
... "name": "Vaidik Kapoor", # Person's name
... "location": "Delhi, India", // Person's location
...
... # Section contains info about
... // person's appearance
... "appearance": {
... "hair_color": "black",
... "eyes_color": "black",
... "height": "6"
... }
... }"""
>>>
>>> json_loaded = commentjson.loads[json_string]
>>> print json_loaded
{u'appearance': {u'eyes_color': u'black', u'hair_color': u'black', u'height': u'6'}, u'name': u'Vaidik Kapoor', u'location': u'Delhi, India'}
- Tác giả: Ahmed Bouchefra theo dõi @ahmedbouchefra
Ngày: 05 tháng 9 năm 2020
Nếu bạn có bất kỳ câu hỏi nào về bài viết này, hãy hỏi họ trong các cuộc thảo luận của chúng tôi 👈 cộng đồng. Bạn cũng có thể
Giống như trang của chúng tôi và đăng ký nguồn cấp dữ liệu của chúng tôi để cập nhật!