def get_json_data(data): json_data = {'data': [], "links": []} d = [] for i in data: # print(i["p.Name"], i["r.relation"], i["n.Name"], i["p.cate"], i["n.cate"]) d.append(i['p.Name'] + "_" + i['p.cate']) d.append(i['n.Name'] + "_" + i['n.cate']) d = list(set(d)) name_dict = {} count = 0 for j in d: j_array = j.split("_") data_item = {} name_dict[j_array[0]] = count count += 1 data_item['name'] = j_array[0] data_item['category'] = CA_LIST[j_array[1]] json_data['data'].append(data_item) for i in data: link_item = {} link_item['source'] = name_dict[i['p.Name']] link_item['target'] = name_dict[i['n.Name']] link_item['value'] = i['r.relation'] json_data['links'].append(link_item) return json_data
时间: 2023-06-15 07:05:42 浏览: 47
这段代码是一个函数,接受一个字典类型的参数data,然后根据这个参数生成一个新的字典类型的json数据。具体来说,首先初始化一个空的json数据,然后遍历输入的data中的每一个元素,将其中涉及到的实体名称和类型都添加到一个列表d中。接着,将d中的每一个元素都解析出实体的名称和类型,并将其添加到新的json数据中的"data"字段中。最后,再遍历一遍输入的data,将其中的每一个关系都添加到新的json数据中的"links"字段中。最终返回生成的新的json数据。
相关问题
TypeError: Object of type Personal_data is not JSON serializable
这个错误通常是因为你在尝试将一个非可序列化的对象转换为 JSON 格式时出现的。JSON 格式只能接受字符串、数字、布尔值、列表、字典和 None 值。
如果你想将一个自定义对象转换为 JSON 格式,你需要在对象中实现一个 `__json__()` 方法,该方法返回一个可以被序列化的字典。你也可以使用 Python 内置的 `json` 模块中的 `default` 参数来指定一个函数,该函数将在对象无法直接序列化时被调用。
例如,假设你有一个名为 `Personal_data` 的自定义类,你可以这样实现 `__json__()` 方法:
```
class Personal_data:
def __init__(self, name, age):
self.name = name
self.age = age
def __json__(self):
return {'name': self.name, 'age': self.age}
```
这样,当你将一个 `Personal_data` 对象转换为 JSON 格式时,它会自动调用 `__json__()` 方法并返回一个字典。
或者,你可以这样使用 `json` 模块中的 `default` 参数:
```
import json
class Personal_data:
def __init__(self, name, age):
self.name = name
self.age = age
data = Personal_data('John', 30)
json.dumps(data, default=lambda x: x.__dict__)
```
这里我们使用了一个 lambda 函数来将对象转换为一个字典,该字典包含对象的所有属性和值。
def get_cve_data(project_type="java"): cve_data = None if project_type == "java": cve_data = getattr(g, '_java_cve_data', None) if cve_data is None: with open(java_vul_fixing_file) as fin: cve_data = g._java_cve_data = json.load(fin) elif project_type == "c": cve_data = getattr(g, '_c_cve_data', None) if cve_data is None: with open(c_vul_fixing_file) as fin: cve_data = g._c_cve_data = json.load(fin) return cve_data
这段代码定义了一个名为 `get_cve_data` 的函数,用于获取特定项目类型的 CVE 数据。函数接受一个可选的参数 `project_type`,默认值为 `"java"`。
函数首先定义了一个变量 `cve_data` 并将其初始化为 `None`。然后,根据 `project_type` 的值,它会从全局对象 `g` 中获取对应项目类型的 CVE 数据。如果 `cve_data` 为 `None`,则说明还没有加载过该项目类型的数据,函数会从相应的文件中读取 JSON 数据,并将其保存到 `g` 对象中。
最后,函数返回获取到的 CVE 数据。
这段代码假设在全局对象 `g` 中存在用于存储 Java 和 C 项目的 CVE 数据的属性 `_java_cve_data` 和 `_c_cve_data`。它还假设有两个文件路径 `java_vul_fixing_file` 和 `c_vul_fixing_file` 分别指向存储 Java 和 C 项目的 CVE 数据的 JSON 文件。
你可以根据需要,修改文件路径和属性名称以适应你的代码结构和数据存储方式。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)