- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
现在我有一个来自 http 请求的类似 json 的字符串,但是键不是字符串格式。例如,
>>> data_string = """
{
server_id: 1,
server_status: 200,
client: "client2",
content: [ {id: 0, info: "info0"}, {id: 2, info: "info2"} ]
}
"""
我想通过 JSON 格式化它,以便轻松提取数据字符串的字段。我有一个在 python 中使用 eval 的解决方案,
eval(data_string, type('Dummy', (dict,), dict(__getitem__ = lambda s, n: n))())
它给了我正确的数据:
{'server_id': 1, 'server_status': 200, 'client': 'client2', 'content': [{'id': 0, 'info': 'info0'}, {'id': 2, 'info': 'info2'}]}
请帮助我理解代码的技巧。谢谢。
PS:我试过json但是失败了。但是,yaml.load(data_string) 有效。
1 Câu trả lời
这一行
eval(data_string, type('Dummy', (dict,), dict(__getitem__ = lambda s, n: n))())
是一种非常丑陋的方式来做同样的事情
class Dummy(dict):
def __getitem__(self, key):
return key
globals_obj = Dummy()
eval(data_string, globals_obj)
然后这个globals_obj
被传递给đánh giá
củaglobals
参数。 globals
必须是将名称映射到值的映射 对象。现在,当 đánh giá
遇到正在使用的变量时,它会引用 cái này 映射对象,就像通过 globals_obj['variable_name']
一样。 __getitem__
方法只是将给定的键作为值返回,因此 globals_obj[42]
-> 42
, globals_obj[None]
-> Không có
等等。
这一切都非常不安全 - 如果服务器想要恶意,api 可能会返回类似 __import__('os').system('execute an evil command')
的代码。
如果这是 JavaScript 但不是 JSON, bạn có thể sử dụng demjson
strict=False
模式下的模块。它肯定比使用 đánh giá
更好,并且可能比使用 YAML 作为 YAML parsers might be insecure 更好。 . And these bugs might be easily remotely exploitable .
>>> import demjson
>>> data_string = """
... {
... server_id: 1,
... server_status: 200,
... client: "client2",
... content: [ {id: 0, info: "info0"}, {id: 2, info: "info2"} ]
... }
... """
>>> demjson.decode(data_string, strict=False)
{'server_id': 1, 'server_status': 200, 'client': 'client2', 'content': [{'id': 0, 'info': 'info0'}, {'id': 2, 'info': 'info2'}]}
关于python - 将 JSON 之类的字符串转换为 python 字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47306581/
Cách sử dụng SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
Tôi mới bắt đầu sử dụng C++ và có một số kinh nghiệm với C#, vì vậy tôi có một số kinh nghiệm lập trình chung. Tuy nhiên, có vẻ như tôi đã bị bắn hạ ngay lập tức. Tôi đã thử tìm kiếm trên Google để không lãng phí thời gian của mọi người, nhưng vô ích. int main(int argc,
Câu hỏi này đã có câu trả lời: Trong Java 8, làm thế nào để chuyển đổi một Bản đồ thành một Bản đồ khác bằng lambda? (8 câu trả lời) Chuyển đổi Bản đồ>
Tôi đang sử dụng node + typescript với swagger tích hợp cho các lệnh gọi API. Tôi Swagger thực hiện yêu cầu sau tới http://localhost:3033/employees/sear
Tôi mới làm quen với mẫu container C++. Tôi đã thu thập được một số hồ sơ. Mỗi bản ghi có một tên duy nhất và danh sách các cặp trường/giá trị. Các bản ghi sẽ được truy cập theo tên. Thứ tự của cặp trường/giá trị rất quan trọng. Vì vậy, tôi thiết kế nó như sau: typedef string
Tôi cần hai phương pháp này nhưng j2me không có, tôi tìm thấy một replaceall(); nhưng đây là replaceall(string,string,string); Phương pháp thứ hai là SringBuffer nhưng trong j2me nó không có
Nếu string là bí danh của String trong .net framework thì tại sao điều này lại xảy ra và tôi nên diễn giải nó như thế nào: type JustAString = string
Tôi có hai danh sách (hoặc chuỗi): một danh sách lớn, một danh sách nhỏ. Tôi muốn kiểm tra xem phần lớn hơn (A) có chứa phần nhỏ hơn (B) không. Kỳ vọng của tôi như sau: Trường hợp 1. B là tập con của A A = [1,2,3] B = [1,2] chứa(A
Tôi có một vấn đề nhỏ mà có vẻ như tôi không thể giải quyết được. Ở đây... Tôi có một đầu vào được tạo như thế này... var input = $(''); Nếu tôi làm thế này... mọi thứ đều ổn $(this).append(input); Nếu tôi
Tôi có đoạn mã sau string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
Có lẽ điều này thực sự đơn giản nhưng tôi đã bối rối một thời gian rồi. Tôi đang cố gắng xuất ra một chuỗi rồi một số double với hai chữ số thập phân theo sau là một chuỗi khác, đây là mã của tôi. System.out.printf("Chi phí:%.2
Đây là một trong những ví dụ từ danh sách truy vấn Cloud Firestore citiesRef.where("state", ">=", "CA").where("state", "= string, chúng ta đang ở trong Stack Overflow
Tôi đang cố kiểm tra xem một chuỗi có nằm trong một chuỗi khác hay không. Mã phía sau khá đơn giản. Tôi có thể làm điều này trong jquery như thế nào? hàm deleteRow(locName, locID) { nếu
Câu hỏi này đã có câu trả lời tại đây: Cách triển khai big int trong C++ (14 câu trả lời) Đã đóng 9 năm trước. Tôi có 2 chuỗi, cả hai đều chỉ chứa số. Những con số này lớn hơn uint64_t
Tôi có một ánh xạ Dozer với một bộ chuyển đổi tùy chỉnh: com.xyz.Customer com.xyz.CustomerDAO customerName
Câu hỏi này đã có câu trả lời tại đây: Làm thế nào để so sánh các chuỗi trong Java? (23 câu trả lời) Đã đóng 6 năm trước. Tôi muốn hiểu cách hoạt động của nhóm chuỗi và quy tắc để một chuỗi bằng với một chuỗi khác là gì
Tôi đã đọc câu hỏi này và một số câu hỏi khác. Nhưng chúng có phần không liên quan đến câu hỏi của tôi. Đối với UILabel nếu bạn không chỉ định ? hoặc ! bạn sẽ nhận được lỗi như thế này: Thuộc tính @IBOutlet không có tùy chọn
Về mặt lý thuyết, phương pháp nào trong hai phương pháp này nhanh hơn và tại sao? (Con trỏ tới chuỗi phải là hằng số.) Sự khác biệt chính xác giữa destination[count] và *destination++ là gì? đích đến[co
Câu hỏi này đã có câu trả lời ở đây: Đã đóng 11 năm trước. Có thể trùng lặp: Is String.Format a
Tôi có một Stream của một tệp, bây giờ tôi muốn nhóm các từ giống nhau vào một Map. Điều quan trọng là tần suất xuất hiện của từ trong Stream. Tôi biết tôi phải sử dụng collect(Collectors.groupingBy(..)
Tôi là một lập trình viên xuất sắc, rất giỏi!