【问题标题】:JSON encoding from python objects?来自python对象的JSON编码?
【发布时间】:2014-02-10 09:58:20
【问题描述】:

我知道对此有几个问题和答案,但我不能确定其中任何一个对我有帮助。

这就是我的情况,我正在使用 sympy 库和极少数 numpy 函数。 我从node.js 调用这些考虑一些网络应用程序,所以我希望收到任何 json 格式的结果。

我在这里面临两个主要问题:

  1. 并非所有 sympy 内容都恰好是普通浮点数甚至字符串。
  2. 解决 JSON 编码问题后,是否可以生成 JavaScript 等效浮点数以非常简单的管理?

更详细地说,我现在正在使用 Taylor sum 级数程序(已经编码)以及这条线的结果,对应于 numpy 函数:

puntosX = linspace(a,b,num=puntos).round(3)

我无法将其转换为 JSON 列表,将输出 puntosX 的打印:

[-10. -7.778 -5.556 -3.333 -1.111 1.111 3.333 5.556 7.778 10. ]

还有

当我通过这一行生成一个表达式数组时:

sumterms.append( (fx.diff(w,i)/factorial(i)) * (x)**i )

在这种情况下发生同样的情况:

[x**3 - x - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

因此,在一个非常简单的黑盒方法中,这意味着,将第一个列表中的所有元素设为浮点数,将第二个列表中的所有元素设为字符串。我认为任何类似 lambda 的行都会有所帮助。

但是,有没有办法告诉jsondemjson 包?

【问题讨论】:

    标签: javascript python json numpy sympy


    【解决方案1】:

    将您的 numpy 数组转换为列表是可行的(如果有直接处理数组的 json 版本,它可能正在执行此转换)。在这里,我正在处理一个示例二维数组。

    In [8]: x=np.linspace(0,1,10).reshape(2,5).round(3)
    
    In [9]: x
    Out[9]: 
    array([[ 0.   ,  0.111,  0.222,  0.333,  0.444],
           [ 0.556,  0.667,  0.778,  0.889,  1.   ]])
    
    In [10]: json.dumps(x.tolist())
    Out[10]: '[[0.0, 0.111, 0.222, 0.333, 0.444], [0.556, 0.667, 0.778, 0.889, 1.0]]'
    

    您想从sympy 传输什么样的输出?如果把公式转成字符串,json.dumps应该没有问题。

    【讨论】:

      【解决方案2】:

      我认为您可以使用 Python 内置的 json 包和 dumps 函数 当您只需要将列表转换为 JSON 格式时,它就像这样简单:

      >>> puntosX
      [-10.0, -7.778, -5.556, -3.333, -1.111, 1.111, 3.333, 5.556, 7.778, 10.0]
      >>> import json
      >>> json.dumps(puntosX)
      '[-10.0, -7.778, -5.556, -3.333, -1.111, 1.111, 3.333, 5.556, 7.778, 10.0]'
      

      你可以像这样将它包装在一个“puntos”对象中:

      >>> json.dumps({'puntos': puntosX})
      '{"puntos": [-10.0, -7.778, -5.556, -3.333, -1.111, 1.111, 3.333, 5.556, 7.778, 10.0]}'
      

      当您希望 puntos 成为字符串值列表时,我建议您这样做:

      >>> json.dumps({'puntos': [str(p) for p in puntosX]})
      '{"puntos": ["-10.0", "-7.778", "-5.556", "-3.333", "-1.111", "1.111", "3.333", "5.556", "7.778", "10.0"]}'
      

      我希望这是你想做的。

      【讨论】:

        猜你喜欢
        • 2015-02-03
        • 1970-01-01
        • 2021-06-01
        • 1970-01-01
        • 2011-07-06
        • 2019-03-11
        • 1970-01-01
        • 1970-01-01
        • 2016-02-01
        相关资源
        最近更新 更多