如何将标签列表转换为API要求的JSON字符串格式?
解决API提交时标签数组字符串格式问题
你的问题核心是API要求value字段必须是JSON数组字符串(例如"[\"tag1\",\"tag2\"]"或"[]"),但当前代码直接将拆分后的标签列表赋值给value,经过json.dumps序列化后,value会被处理成JSON数组而非字符串形式,不符合API的格式要求。
修改方案
只需要对拆分后的标签列表再执行一次JSON序列化,将其转换为字符串格式后再赋值给value字段即可。同时额外处理空标签的边界情况,避免出现[""]的无效数组:
import requests import json from bs4 import BeautifulSoup with open('essentie_metadata.xml', 'r') as f: data = f.read() Bs_data = BeautifulSoup(data, "lxml") all_results = Bs_data.findAll('record') for child in all_results: print(child.find("id").text) if child.find("type").text == "document": id = child.find("id").text url = "https://site.nl/api/nodes/" + id + "/metadata" trefwoorden = child.find("trefwoorden").text.split("*") # 处理空标签:拆分后得到[""]时转为空数组 if trefwoorden == [""]: trefwoorden = [] # 将标签列表转为JSON数组字符串 value_str = json.dumps(trefwoorden) payloadtw = json.dumps([ { "name": "Trefwoorden", "value": value_str, "updateOperation": "replace" } ]) headers = { 'accept': 'application/json', 'Authorization': 'Bearer token', 'Content-Type': 'application/json' } response = requests.request("PUT", url, headers=headers, data=payloadtw)
关键说明
- JSON字符串转换:通过
json.dumps(trefwoorden)把列表转成JSON格式的字符串,这样最终payload里的value就会是API要求的"[\"tag1\",\"tag2\"]"或"[]"形式。 - 空标签处理:当
<trefwoorden>标签为空时,split("*")会返回[""],手动转为空数组后,生成的JSON字符串就是"[]",符合API的空值要求。
内容的提问来源于stack exchange,提问作者Henk Van Der Pol
相关产品推荐
相关产品推荐

