59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
|
import json
|
||
|
|
||
|
|
||
|
def find_keys_by_value(target_value, json_data):
|
||
|
matched_keys = [k for k, v in json_data.items() if v == target_value]
|
||
|
if not matched_keys:
|
||
|
matched_keys = [k for k, v in json_data.items() if isinstance(v, str) and v.startswith(target_value)]
|
||
|
return matched_keys
|
||
|
|
||
|
|
||
|
def find_keys_with_prefix(key_prefix, json_data):
|
||
|
subheadings = [k for k in json_data if k.startswith(key_prefix) and k != key_prefix]
|
||
|
return subheadings
|
||
|
|
||
|
|
||
|
def extract_json(data, target_values):
|
||
|
results = {}
|
||
|
for target_value in target_values:
|
||
|
matched_keys = find_keys_by_value(target_value, data)
|
||
|
for key in matched_keys:
|
||
|
key_and_subheadings = {key: data[key]}
|
||
|
subheadings = find_keys_with_prefix(key, data)
|
||
|
for subkey in subheadings:
|
||
|
key_and_subheadings[subkey] = data[subkey]
|
||
|
results[target_value] = key_and_subheadings
|
||
|
return results
|
||
|
|
||
|
|
||
|
def renumber_keys(data, level=1):
|
||
|
if isinstance(data, dict):
|
||
|
new_dict = {}
|
||
|
for key in data:
|
||
|
parts = key.split('.')
|
||
|
parts[0] = '1'
|
||
|
new_key = '.'.join(parts)
|
||
|
new_dict[new_key] = renumber_keys(data[key], level + 1)
|
||
|
return new_dict
|
||
|
else:
|
||
|
return data
|
||
|
|
||
|
|
||
|
def json_results(extr_json):
|
||
|
renumbered_data = {}
|
||
|
for key in extr_json:
|
||
|
renumbered_data[key] = renumber_keys(extr_json[key])
|
||
|
return renumbered_data
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
target_values = ["投标文件"]
|
||
|
with open('clause3.json', 'r', encoding='utf-8') as file:
|
||
|
data = json.load(file)
|
||
|
extracted_data = extract_json(data, target_values)
|
||
|
renumbered_data = json_results(extracted_data)
|
||
|
|
||
|
with open('output_results1.json', 'w', encoding='utf-8') as file:
|
||
|
json.dump(renumbered_data, file, indent=4, ensure_ascii=False)
|
||
|
print("JSON文件已按要求重新编号并保存.")
|