You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将特定字符串转换为符合指定结构的Valid JSON/YAML

解析JS风格字符串并转换为指定JSON结构

需求说明

原始输入字符串:

value = "{from:[3,4],to:[7,4],color:2},{from:[3,6],to:[10,6],color:3}"

需要将其转换为数组转带索引对象、所有值转为字符串的结构,目标格式如下(同时符合Valid JSON和Valid YAML规范):

{
  "0": {
    "from": {
      "0": "3",
      "1": "4"
    },
    "to": {
      "0": "7",
      "1": "4"
    },
    "color": "2"
  },
  "1": {
    "from": {
      "0": "3",
      "1": "6"
    },
    "to": {
      "0": "10",
      "1": "6"
    },
    "color": "3"
  }
}

修改后的Python脚本

import json
import re

value = "{from:[3,4],to:[7,4],color:2},{from:[3,6],to:[10,6],color:3}"

def parse_json(value):
    arr = value.split("},")
    arr = [x+"}" for x in arr]
    arr[-1] = arr[-1][:-1]
    
    return json.dumps({str(i): process_item(add_quotation_marks(x)) for i, x in enumerate(arr)}, indent=2)

def add_quotation_marks(value):
    # 给键名添加引号,转换为合法JSON格式
    words = re.findall(r'(\w+:)', value)
    for word in words:
        value = value.replace(word[:-1], f'"{word[:-1]}"')
    return json.loads(value)

def process_item(item):
    # 处理每个对象的属性值:数组转索引对象,所有值转字符串
    processed = {}
    for key, val in item.items():
        if isinstance(val, list):
            # 数组转成带索引的对象,值转字符串
            processed[key] = {str(idx): str(element) for idx, element in enumerate(val)}
        else:
            # 单个值直接转字符串
            processed[key] = str(val)
    return processed

print(parse_json(value))

关键改动说明

  1. 新增process_item函数:专门处理每个对象的属性值,完成两个核心转换:
    • 若值为数组,将其转换为以索引为键、元素转为字符串为值的对象
    • 非数组值直接转为字符串
  2. 修改parse_json函数:在原有解析基础上,调用process_item处理每个解析后的对象,确保输出符合要求
  3. 添加indent=2到json.dumps:让输出的JSON格式更易读,和目标格式一致

内容的提问来源于stack exchange,提问作者skrtsway

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 06:56:54