【问题标题】:How to convert a string representation of an array of objects to an array of objects? [duplicate]如何将对象数组的字符串表示形式转换为对象数组? [复制]
【发布时间】:2021-07-24 21:11:22
【问题描述】:

要将对象数组转换为字符串,我可以使用str(arr)
反过来,有没有内置的 Python 函数将对象数组的字符串表示形式转换为对象数组?

换句话说,如何将"[{'key1': 'val1', 'key2': 'val2'}]" 转换回对象数组?我想用split 来做,但它不会像str() 那样干净。

// examples
arr = [{'key1': 'val1', 'key2': 'val2', 'key3': 'val3'}, {'key1': 'val1', 'key2': 'val2'}]
arrStr = str(arr)
// "[{'key1': 'val1', 'key2': 'val2', 'key3': 'val3'}, {'key1': 'val1', 'key2': 'val2'}]"

arr2 = [{'key1': 'val1', 'key2': 'val2'}]
arrStr2 = str(arr)
// "[{'key1': 'val1', 'key2': 'val2'}]"

【问题讨论】:

标签: python arrays string type-conversion


【解决方案1】:
import json

array_of_objects = json.loads("[{'key1': 'val1', 'key2': 'val2'}]".replace("'",'"'))

以下是有关各方的速度比较:

import ast
import json

s = "[{'key1': 'val1', 'key2': 'val2'}]"

def kludge():
    json.loads(s.replace("'",'"'))

def fast():
    ast.literal_eval(s)
    
%timeit kludge()
%timeit fast()
>>> 2.02 µs ± 14.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
>>> 10 µs ± 25.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

【讨论】:

  • JSON 在字符串周围使用双引号,而不是单引号
  • 你完全正确。我的解决方案适用于 op。
  • 如果任何键或值中包含单引号将不起作用,它们将被转换为双引号。
  • 为什么要使用这样的工具而不是为这项工作而构建的工具,ast.literal_eval()
  • 好点。更新了我的答案。
猜你喜欢
  • 2014-07-07
  • 1970-01-01
  • 2022-10-07
  • 2021-12-28
  • 1970-01-01
  • 2014-08-20
  • 2011-12-27
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多