Theo this conversion table, ints Python được viết dưới dạng số JSON khi được tuần tự hóa bằng mô-đun JSON - như tôi mong đợi và mong muốn.Tại sao các phím int của một dict python biến thành chuỗi khi sử dụng json.dumps?
Tôi có một cuốn từ điển với một phím số nguyên và số nguyên giá trị:
>>> d = {1:2}
>>> type(d.items()[0][0])
<type 'int'>
>>> type(d.items()[0][1])
<type 'int'>
Khi tôi sử dụng các mô-đun json để serialize này thành một chuỗi JSON, giá trị được viết như một số, nhưng quan trọng là viết như là một chuỗi:
>>> json.dumps(d)
'{"1": 2}'
Đây không phải là hành vi của tôi muốn, và có vẻ như đặc biệt bị phá vỡ kể từ khi nó phá vỡ json.dumps/json.loads tròn vấp ngã:
>>> d == json.loads(json.dumps(d))
False
Tại sao điều này xảy ra và có cách nào tôi có thể buộc khóa được viết dưới dạng số không?
Khóa JSON là * luôn * chuỗi. – duffymo
... và JSON sử dụng chuỗi vì chúng độc lập theo thứ tự byte. – martineau
Nếu JSON không * đúng * yêu cầu, bạn có thể dùng YAML bằng PyYAML thay vì: 'd = {1: 2, 3: 4}; nhập yaml; yaml.safe_load (yaml.safe_dump (d)) == d' trả về True. Nói chung phong cách 'nội tuyến' của YAML trông giống như json linh hoạt hơn (các khóa có thể là số, các chuỗi thường không phải được trích dẫn). Tôi sử dụng 'safe_load' ở đây vì bình thường' yaml.load' có các tính năng (xây dựng các lớp, v.v) mà khó bảo mật một cách chính xác; 'safe_load | dump' hạn chế tập hợp các đầu vào/đầu ra được hỗ trợ thành các kiểu nguyên thủy (bool, int, float, string, list, set, dict) và do đó an toàn để sử dụng trên các đầu vào tùy ý. – kampu