Trong trường hợp khi có lỗi rằng một cái gì đó không phải là JSON có thể tuần tự, các câu trả lời ở trên sẽ không hoạt động. Nếu bạn chỉ muốn lưu nó để con người có thể đọc được thì bạn cần gọi chuỗi đệ quy trên tất cả các phần tử không có trong từ điển của bạn. Nếu bạn muốn tải nó xuống sau đó, hãy lưu nó dưới dạng tệp Pickle, sau đó tải xuống [ví dụ:. torch.save[obj, f]
hoạt động tốt]
Đây là những gì làm việc cho tôi
#%%
def _to_json_dict_with_strings[dictionary]:
"""
Convert dict to dict with leafs only being strings. So it recursively makes keys to strings
if they are not dictionaries.
Use case:
- saving dictionary of tensors [convert the tensors to strins!]
- saving arguments from script [e.g. argparse] for it to be pretty
e.g.
"""
if type[dictionary] != dict:
return str[dictionary]
d = {k: _to_json_dict_with_strings[v] for k, v in dictionary.items[]}
return d
def to_json[dic]:
import types
import argparse
if type[dic] is dict:
dic = dict[dic]
else:
dic = dic.__dict__
return _to_json_dict_with_strings[dic]
def save_to_json_pretty[dic, path, mode='w', indent=4, sort_keys=True]:
import json
with open[path, mode] as f:
json.dump[to_json[dic], f, indent=indent, sort_keys=sort_keys]
def my_pprint[dic]:
"""
@param dic:
@return:
Note: this is not the same as pprint.
"""
import json
# make all keys strings recursively with their naitve str function
dic = to_json[dic]
# pretty print
pretty_dic = json.dumps[dic, indent=4, sort_keys=True]
print[pretty_dic]
# print[json.dumps[dic, indent=4, sort_keys=True]]
# return pretty_dic
import torch
# import json # results in non serializabe errors for torch.Tensors
from pprint import pprint
dic = {'x': torch.randn[1, 3], 'rec': {'y': torch.randn[1, 3]}}
my_pprint[dic]
pprint[dic]
đầu ra
{
"rec": {
"y": "tensor[[[-0.3137, 0.3138, 1.2894]]]"
},
"x": "tensor[[[-1.5909, 0.0516, -1.5445]]]"
}
{'rec': {'y': tensor[[[-0.3137, 0.3138, 1.2894]]]},
'x': tensor[[[-1.5909, 0.0516, -1.5445]]]}
Tôi không biết sao trả lại chuỗi sau đó nó không hoạt động nhưng có vẻ như bạn phải đặt các khoảng trống chứa trực tiếp vào câu lệnh trong. Lưu ý
{
"rec": {
"y": "tensor[[[-0.3137, 0.3138, 1.2894]]]"
},
"x": "tensor[[[-1.5909, 0.0516, -1.5445]]]"
}
{'rec': {'y': tensor[[[-0.3137, 0.3138, 1.2894]]]},
'x': tensor[[[-1.5909, 0.0516, -1.5445]]]}
0 vì nó đã được xuất đề và cũng đã hoạt động. Lưu ý Không phải tất cả các đối tượng đều có thể được chuyển đổi thành một lệnh với {
"rec": {
"y": "tensor[[[-0.3137, 0.3138, 1.2894]]]"
},
"x": "tensor[[[-1.5909, 0.0516, -1.5445]]]"
}
{'rec': {'y': tensor[[[-0.3137, 0.3138, 1.2894]]]},
'x': tensor[[[-1.5909, 0.0516, -1.5445]]]}
1, đó là lý do tại sao một số mã của tôi có kiểm tra về điều kiện nàyĐịnh nghĩa bài văn
Tôi muốn lưu chuỗi pytorch nhưng tôi vẫn gặp lỗi
TypeError: tensor is not JSON serializable
Vì vậy, tôi đã mã hóa ở trên. Lưu ý rằng có, trong Pytorch, bạn sử dụng
{
"rec": {
"y": "tensor[[[-0.3137, 0.3138, 1.2894]]]"
},
"x": "tensor[[[-1.5909, 0.0516, -1.5445]]]"
}
{'rec': {'y': tensor[[[-0.3137, 0.3138, 1.2894]]]},
'x': tensor[[[-1.5909, 0.0516, -1.5445]]]}
2 nhưng tệp Pickle không thể đọc được. Kiểm tra bài đăng liên quan này. https. //bàn luận. ngọn đuốc. org/t/typeerror-tensor-is-not-json-serializable/36065/3Trong trường hợp có lỗi xảy ra mà một cái gì đó không thể tuần tự hóa json, các câu trả lời ở trên sẽ không hoạt động. Nếu bạn chỉ muốn lưu nó để con người có thể đọc được thì bạn cần gọi đệ quy chuỗi trên tất cả các phần tử không phải từ điển trong từ điển của bạn. Nếu muốn load sau thì save thành file pickle rồi load [e. g. torch.save[obj, f]
hoạt động tốt]
Đây là những gì làm việc cho tôi
#%%
def _to_json_dict_with_strings[dictionary]:
"""
Convert dict to dict with leafs only being strings. So it recursively makes keys to strings
if they are not dictionaries.
Use case:
- saving dictionary of tensors [convert the tensors to strins!]
- saving arguments from script [e.g. argparse] for it to be pretty
e.g.
"""
if type[dictionary] != dict:
return str[dictionary]
d = {k: _to_json_dict_with_strings[v] for k, v in dictionary.items[]}
return d
def to_json[dic]:
import types
import argparse
if type[dic] is dict:
dic = dict[dic]
else:
dic = dic.__dict__
return _to_json_dict_with_strings[dic]
def save_to_json_pretty[dic, path, mode='w', indent=4, sort_keys=True]:
import json
with open[path, mode] as f:
json.dump[to_json[dic], f, indent=indent, sort_keys=sort_keys]
def my_pprint[dic]:
"""
@param dic:
@return:
Note: this is not the same as pprint.
"""
import json
# make all keys strings recursively with their naitve str function
dic = to_json[dic]
# pretty print
pretty_dic = json.dumps[dic, indent=4, sort_keys=True]
print[pretty_dic]
# print[json.dumps[dic, indent=4, sort_keys=True]]
# return pretty_dic
import torch
# import json # results in non serializabe errors for torch.Tensors
from pprint import pprint
dic = {'x': torch.randn[1, 3], 'rec': {'y': torch.randn[1, 3]}}
my_pprint[dic]
pprint[dic]
đầu ra
{
"rec": {
"y": "tensor[[[-0.3137, 0.3138, 1.2894]]]"
},
"x": "tensor[[[-1.5909, 0.0516, -1.5445]]]"
}
{'rec': {'y': tensor[[[-0.3137, 0.3138, 1.2894]]]},
'x': tensor[[[-1.5909, 0.0516, -1.5445]]]}
Tôi không biết tại sao trả lại chuỗi sau đó in nó không hoạt động nhưng có vẻ như bạn phải đặt kết xuất trực tiếp trong câu lệnh in. Lưu ý
{
"rec": {
"y": "tensor[[[-0.3137, 0.3138, 1.2894]]]"
},
"x": "tensor[[[-1.5909, 0.0516, -1.5445]]]"
}
{'rec': {'y': tensor[[[-0.3137, 0.3138, 1.2894]]]},
'x': tensor[[[-1.5909, 0.0516, -1.5445]]]}
0 vì nó đã được đề xuất cũng đã hoạt động. Lưu ý rằng không phải tất cả các đối tượng đều có thể được chuyển đổi thành chính tả với {
"rec": {
"y": "tensor[[[-0.3137, 0.3138, 1.2894]]]"
},
"x": "tensor[[[-1.5909, 0.0516, -1.5445]]]"
}
{'rec': {'y': tensor[[[-0.3137, 0.3138, 1.2894]]]},
'x': tensor[[[-1.5909, 0.0516, -1.5445]]]}
1, đó là lý do tại sao một số mã của tôi kiểm tra điều kiện nàyĐịnh nghĩa bài văn
Tôi muốn lưu chuỗi pytorch nhưng tôi cứ gặp lỗi
TypeError: tensor is not JSON serializable
vì vậy tôi đã mã hóa ở trên. Lưu ý rằng có, trong pytorch bạn sử dụng
{
"rec": {
"y": "tensor[[[-0.3137, 0.3138, 1.2894]]]"
},
"x": "tensor[[[-1.5909, 0.0516, -1.5445]]]"
}
{'rec': {'y': tensor[[[-0.3137, 0.3138, 1.2894]]]},
'x': tensor[[[-1.5909, 0.0516, -1.5445]]]}
2 nhưng các tệp dưa chua không thể đọc được. Kiểm tra bài viết liên quan này. https. //bàn luận. ngọn đuốc. org/t/typeerror-tensor-is-not-json-serializable/36065/3PPrint cũng có các đối số thụt lề nhưng tôi không thích giao diện của nó
pprint[stats, indent=4, sort_dicts=True]
đầu ra
{ 'cca': { 'all': {'avg': tensor[0.5132], 'std': tensor[0.1532]},
'avg': tensor[[0.5993, 0.5571, 0.4910, 0.4053]],
'rep': {'avg': tensor[0.5491], 'std': tensor[0.0743]},
'std': tensor[[0.0316, 0.0368, 0.0910, 0.2490]]},
'cka': { 'all': {'avg': tensor[0.7885], 'std': tensor[0.3449]},
'avg': tensor[[1.0000, 0.9840, 0.9442, 0.2260]],
'rep': {'avg': tensor[0.9761], 'std': tensor[0.0468]},
'std': tensor[[5.9043e-07, 2.9688e-02, 6.3634e-02, 2.1686e-01]]},
'cosine': { 'all': {'avg': tensor[0.5931], 'std': tensor[0.7158]},
'avg': tensor[[ 0.9825, 0.9001, 0.7909, -0.3012]],
'rep': {'avg': tensor[0.8912], 'std': tensor[0.1571]},
'std': tensor[[0.0371, 0.1232, 0.1976, 0.9536]]},
'nes': { 'all': {'avg': tensor[0.6771], 'std': tensor[0.2891]},
'avg': tensor[[0.9326, 0.8038, 0.6852, 0.2867]],
'rep': {'avg': tensor[0.8072], 'std': tensor[0.1596]},
'std': tensor[[0.0695, 0.1266, 0.1578, 0.2339]]},
'nes_output': { 'all': {'avg': None, 'std': None},
'avg': tensor[0.2975],
'rep': {'avg': None, 'std': None},
'std': tensor[0.0945]},
'query_loss': { 'all': {'avg': None, 'std': None},
'avg': tensor[12.3746],
'rep': {'avg': None, 'std': None},
'std': tensor[13.7910]}}
so với
________số 8bạn có thể in một. json bằng Python?
Chúng ta có thể sử dụng mô-đun json của Python để in đẹp dữ liệu JSON . Mô-đun json được khuyến nghị để hoạt động với các tệp JSON. Chúng ta có thể sử dụng phương thức dumps[] để lấy chuỗi JSON được định dạng đẹp.
Làm cách nào để in một mục JSON bằng Python?
Cách in đẹp chuỗi JSON bằng Python .
gọi json. loading[] để chuyển đổi chuỗi JSON thành đối tượng Python
sử dụng json. phương thức dumps[] để in đẹp đối tượng
Làm cách nào để xem JSON bằng Python?
Đọc tệp JSON bằng Python .
Nhập mô-đun json
Mở tệp bằng tên của tệp json bằng hàm open[]
Mở tệp bằng tên của tệp json bằng hàm open[]
Đọc tệp json bằng load[] và đặt dữ liệu json vào một biến
Làm cách nào để in một câu lệnh trong JSON?
Cách tiếp cận. .
Khai báo một đối tượng JSON và lưu trữ nó vào biến
Sử dụng JSON. stringify[obj] để chuyển đổi các đối tượng JavaScript thành chuỗi và hiển thị nó
Sử dụng JSON. Phương thức stringify[obj, replacer, space] để chuyển đổi các đối tượng JavaScript thành chuỗi ở định dạng đẹp. Trong ví dụ này, chúng tôi sử dụng kích thước không gian bốn