Hướng dẫn json single quotes python - json trích dẫn đơn python

Hai vấn đề với câu trả lời được đưa ra cho đến nay, nếu, ví dụ, một phát trực tuyến JSON không chuẩn như vậy. Bởi vì sau đó người ta có thể phải diễn giải một chuỗi đến (không phải là từ điển Python).

Nội phân Chính showShow

  • JsondecodeError: mong đợi tên thuộc tính được đặt trong Double Note: Dòng 1 Cột 2 (Char 1) #
  • Sự kết luận #
  • Tôi có thể sử dụng các trích dẫn đơn trong JSON không?
  • Làm thế nào để bạn chuyển đổi một chuỗi thành một đối tượng JSON trong Python?
  • JSON có sử dụng báo giá kép hay đơn không?
  • Làm thế nào để bạn thoát khỏi một trích dẫn trong json?

Vấn đề 1 -

>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
1: Với Python 3.7.+ Và sử dụng Conda, tôi không thể cài đặt Demjson vì hiện tại không hỗ trợ Python> 3.5. Vì vậy, tôi cần một giải pháp với các phương tiện đơn giản hơn, ví dụ ____ 12and/hoặc
>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
3.

Vấn đề 2 -

>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
2 &
>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
3: Nếu một JSON vừa được trích dẫn và chứa một chuỗi trong ít nhất một giá trị, từ đó chứa các trích dẫn đơn lẻ, giải pháp đơn giản nhưng thực tế duy nhất tôi đã tìm thấy là áp dụng cả hai:

Trong ví dụ sau, chúng tôi giả sử

>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
6 là đối tượng chuỗi JSON đến:

>>> line = str({'abc':'008565','name':'xyz','description':'can control TV\'s and more'})

Bước 1: Chuyển đổi chuỗi đến thành từ điển bằng cách sử dụng

>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
7 Bước 2: Áp dụng
>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
3 cho nó để chuyển đổi đáng tin cậy các khóa và giá trị, nhưng không chạm vào nội dung của các giá trị:
Step 2: apply
>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
3 to it for the reliable conversion of keys and values, but without touching the contents of values:

>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}

>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
3 một mình sẽ không thực hiện công việc vì nó không diễn giải JSON, mà chỉ thấy chuỗi. Tương tự đối với
>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
7: Mặc dù nó diễn giải chính xác JSON (từ điển), nhưng nó không chuyển đổi những gì chúng ta cần.

Đôi khi, bạn có thể có được điều này:-

data = "{'name': 'kamal', 'address': 'jb'}"

Nhưng

data = "{'name': 'kamal', 'address': 'jb'}"
1 sẽ từ chối điều này vì JSON yêu cầu báo giá gấp đôi. Bạn có thể sử dụng
>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
7 thay thế.

data_dict = ast.literal_eval(data)

Protips liên quan

Chuyển đổi tệp dữ liệu JSON trích dẫn đơn thành Tệp dữ liệu JSON trích dẫn gấp đôi (không có báo giá bên trong)

Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều

__author__='mbrzustowicz' = 'mbrzustowicz'
# metadata.json có những trích dẫn duy nhất như thế này
# {'asin': 'b00m0aepxg', 'imurl': 'http://ecx.images-amazon.com/images/i/51hcxtuehll._bo2,204,203,200_ .....}
# Vì vậy, chiến lược là đọc từng dòng dưới dạng chuỗi và đổ vào tệp JSON thực
Nhập khẩu json
Nhập khẩu ast
FR = Open ("/user/mbrzustowicz/tải xuống/metadata.json")=open("/Users/mbrzustowicz/Downloads/metadata.json")
fw = open ("/user/mbrzustowicz/amazon_product_metadata.json", "w")=open("/Users/mbrzustowicz/amazon_product_metadata.json", "w")
forlineinfr: line in fr:
json_dat = json.dumps (ast.literal_eval (dòng)) = json.dumps(ast.literal_eval(line))
dict_dat = json.loads (json_dat) = json.loads(json_dat)
json.dump (dict_dat, fw).dump(dict_dat, fw)
fw.write ("\ n").write("\n")
fw.close ().close()
fr.close ().close()

JsondecodeError: mong đợi tên thuộc tính được đặt trong Double Note: Dòng 1 Cột 2 (Char 1) #

Python "JSondecodeError: mong đợi tên thuộc tính được đặt trong các trích dẫn kép: dòng 1 cột 2 (char 1)" xảy ra khi chúng ta cố gắng phân tích chuỗi JSON không hợp lệ (ví dụ: các khóa hoặc giá trị được trích xuất đơn hoặc dấu phẩy kéo dài). Sử dụng phương thức

>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
7 để giải quyết lỗi.

Dưới đây là một ví dụ về cách xảy ra lỗi.

Copied!

import json invalid_json = r"{'name': 'Alice'}" # ⛔️ json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1) result = json.loads(invalid_json)

Lưu ý rằng chuỗi có khóa và giá trị được trích xuất đơn, điều đó có nghĩa là nó không phải là chuỗi JSON hợp lệ.

Các phím và giá trị JSON (Chuỗi) phải được đặt trong các trích dẫn kép.

Thay vào đó, nó chỉ là một từ điển Python được bọc trong một chuỗi.

Bạn có thể giải quyết lỗi bằng cách sử dụng phương pháp

data = "{'name': 'kamal', 'address': 'jb'}"
4 để đánh giá chuỗi có chứa chữ Python.

Copied!

import ast invalid_json = r"{'name': 'Alice'}" result = ast.literal_eval(invalid_json) print(type(result)) # 👉️ print(result) # 👉️ {'name': 'Alice'} print(result['name']) # 👉️ Alice

Phương pháp ast.literal_eval cho phép chúng tôi đánh giá một cách an toàn một chuỗi có chứa một con trăn theo nghĩa đen.

Chuỗi có thể bao gồm các chuỗi, byte, số, bộ dữ liệu, danh sách, dicts, bộ, booleans và không có.

Một cách tiếp cận khác là sử dụng phương thức

data = "{'name': 'kamal', 'address': 'jb'}"
5 để thay thế tất cả các trích dẫn đơn trong chuỗi bằng dấu ngoặc kép.

Copied!

import json invalid_json = r"{'name': 'Alice'}" valid_json = invalid_json.replace("\'", "\"") print(valid_json) # 👉️ '{"name": "Alice"}' my_dict = json.loads(valid_json) print(my_dict) # 👉️ {'name': 'Alice'} print(type(my_dict)) # 👉️

Tuy nhiên, điều này rất rủi ro vì chuỗi có thể chứa một trích dẫn ở đâu đó trong nội dung của nó, ví dụ:

data = "{'name': 'kamal', 'address': 'jb'}"
6.

Bạn cũng có thể sử dụng phương thức

data = "{'name': 'kamal', 'address': 'jb'}"
4 nếu chuỗi của bạn chứa dấu phẩy kéo dài.

Copied!

import ast invalid_json = r'{"name": "Alice",}' result = ast.literal_eval(invalid_json) print(type(result)) # 👉️ print(result) # 👉️ {'name': 'Alice'} print(result['name']) # 👉️ Alice

Dấu phẩy kéo dài cũng làm cho chuỗi JSON không hợp lệ, nhưng từ điển Python được phép có dấu phẩy kéo theo cặp giá trị khóa cuối cùng.

Ngoài ra, bạn có thể thử sử dụng phương thức

data = "{'name': 'kamal', 'address': 'jb'}"
8.

Hãy chắc chắn rằng bạn đã cài đặt

data = "{'name': 'kamal', 'address': 'jb'}"
9 bằng cách chạy
data_dict = ast.literal_eval(data)
0.

Copied!

import yaml invalid_json = r'{"name": "Alice",}' # 👈️ has trailing comma my_dict = yaml.safe_load(invalid_json) print(my_dict) # 👉️ {'name': 'Alice'} print(type(my_dict)) # 👉️

Hãy chắc chắn rằng giá trị bạn đang cố gắng phân tích là một chuỗi JSON và chưa được phân tích cú pháp vào một đối tượng Python bản địa.

Nếu bạn cần phân tích chuỗi JSON vào đối tượng Python gốc, bạn phải sử dụng phương thức

data_dict = ast.literal_eval(data)
1 và nếu bạn cần chuyển đổi đối tượng Python thành chuỗi JSON, bạn phải sử dụng phương thức
data_dict = ast.literal_eval(data)
2.

Copied!

import json json_str = r'{"name": "Alice", "age": 30}' # ✅ parse JSON string to Python native dict my_dict = json.loads(json_str) print(type(my_dict)) # 👉️ # ✅ convert Python native dict to a JSON string my_json_str = json.dumps(my_dict) print(type(my_json_str)) # 👉️

Phương pháp

data_dict = ast.literal_eval(data)
1 về cơ bản giúp chúng ta tải một đối tượng gốc Python (ví dụ: từ điển hoặc danh sách) từ chuỗi JSON.

Phương thức json.dumps chuyển đổi một đối tượng Python thành chuỗi được định dạng JSON.

Lớp

data_dict = ast.literal_eval(data)
4 hỗ trợ các đối tượng và loại sau theo mặc định.

PythonJson
DIGNsự vật
Danh sách, tuplemảng
strsợi dây
int, float, int và float có nguồn gốc từcon số
ĐÚNG VẬYthật
Saisai
Không cóvô giá trị

Nếu bạn không chắc chắn loại đối tượng nào một cửa hàng thay đổi, hãy sử dụng lớp

data_dict = ast.literal_eval(data)
5 tích hợp.

>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
0

Loại loại trả về loại của một đối tượng.

Hàm isinstance trả về

data_dict = ast.literal_eval(data)
6 nếu được truyền trong đối tượng là một thể hiện hoặc một lớp con của được truyền trong lớp.

Sự kết luận #

Python "JSondecodeError: mong đợi tên thuộc tính được đặt trong các trích dẫn kép: dòng 1 cột 2 (char 1)" xảy ra khi chúng ta cố gắng phân tích chuỗi JSON không hợp lệ (ví dụ: các khóa hoặc giá trị được trích xuất đơn hoặc dấu phẩy kéo dài). Sử dụng phương thức

>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
7 để giải quyết lỗi.

Tôi có thể sử dụng các trích dẫn đơn trong JSON không?

Các chuỗi trong JSON được chỉ định bằng cách sử dụng báo giá kép, tức là, ". Nếu các chuỗi được đặt bằng cách sử dụng các trích dẫn đơn, thì JSON là một JSON không hợp lệ.If the strings are enclosed using single quotes, then the JSON is an invalid JSON .

Làm thế nào để bạn chuyển đổi một chuỗi thành một đối tượng JSON trong Python?

Bạn có thể biến nó thành JSON trong Python bằng hàm json.loads (). JSON. Hàm tải () chấp nhận làm đầu vào một chuỗi hợp lệ và chuyển đổi nó thành từ điển Python.using the json. loads() function. The json. loads() function accepts as input a valid string and converts it to a Python dictionary.

JSON có sử dụng báo giá kép hay đơn không?

JSON được tiêu chuẩn hóa để sử dụng các trích dẫn kép, ở mức độ này sẽ không được coi là JSON tiêu chuẩn và sẽ lỗi trong trình phân tích cú pháp JSON.double-quotes, to the degree that this would not be considered standard JSON and would error in a JSON parser.

Làm thế nào để bạn thoát khỏi một trích dẫn trong json?

Backspace được thay thế bằng \ b ..

Nguồn cấp dữ liệu hình thức được thay thế bằng \ f ..

Đường mới được thay thế bằng \ n ..

Vận chuyển trở lại để được thay thế bằng \ r ..

Tab được thay thế bằng \ t ..

Báo giá kép được thay thế bằng \ ".

Backslash để được thay thế bằng \\.