【递归】利用递归方法分析json格式的字符串生存到字典中

[复制链接]
发表于 2026-2-9 22:55:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1. 标题

分析json格式的字符串,并将其转成字典格式。
2. 分析

这是一道必要用递归的标题。
有几个地方必要留意:

  • 知道 json 格式的字符串长什么样子
  • 知道 该用递归的方式写题,递归处置处罚的是新的字符串,传入下层栈的字符串得遍历获取。
3. 代码
  1. # 将json字符串解析成字典对象
  2. def parse_json_to_dict(s):
  3.     # print(s)
  4.     res = {}
  5.     key = "" # 初始化为空
  6.     value = ""
  7.     flag_of_colon = 0
  8.     i = 0
  9.     while(i < len(s)):
  10.         cur_char = s[i]        
  11.         # print(i, cur_char)
  12.         if i == 0 or cur_char== " " or cur_char == '"' or cur_char=="}":        
  13.             i += 1
  14.             continue
  15.         else:
  16.             # 如果不是从0位开始,且该位是{
  17.             if cur_char == "{":
  18.                 # 找到下一个匹配的}下标
  19.                 j = i
  20.                 cnt = 0 # {的个数
  21.                 target = s[j]
  22.                 while(j < len(s)):
  23.                     if target == "{":
  24.                         cnt += 1
  25.                     elif target == "}":
  26.                         cnt -= 1
  27.                     j += 1
  28.                     if cnt == 0:
  29.                         break
  30.                     target = s[j]               
  31.                 new_s = s[i:j]
  32.                 tmp = parse_json_to_dict(new_s)
  33.                 # print("tmp = ", tmp)
  34.                 # print("key = ", key)
  35.                 res[key] = tmp
  36.                 key = ""
  37.                 i = j
  38.                 continue
  39.             elif cur_char == ":": # 开始换
  40.                 flag_of_colon = 1
  41.             elif cur_char == ",": # 重置
  42.                 if len(key) and len(value):
  43.                     res[key] = value
  44.                 flag_of_colon = 0
  45.                 key = ""
  46.                 value = ""
  47.             else:
  48.                 if flag_of_colon:
  49.                     value = value + cur_char
  50.                 else:
  51.                     key = key + cur_char
  52.         i += 1
  53.     if len(key) and len(value):
  54.         res[key] = value
  55.     return res
  56. s = """{"name":"liushen", "age":"28"}"""
  57. # s = """{"name":"liushen", "other":{"age":"28"}}"""
  58. # s = """{"name":"liushen", "other":{"o2":{"sex":"male"}}, "school":{"abc":"ecnu"}}"""
  59. res = parse_json_to_dict(s)
  60. print(res)
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表