gpt4 book ai didi

javascript - 使用 Python 将 JavaScript 数组转换为 JSON

转载 作者:太空狗 更新时间:2023-10-30 02:06:44 25 4
gpt4 key购买 nike

我正在从远程站点获取一个 .js 文件,其中包含我想使用我的 Google App Engine 站点上的 simplejson 库处理为 JSON 的数据。 .js 文件如下所示:

var txns = [
{ apples: '100', oranges: '20', type: 'SELL'},
{ apples: '200', oranges: '10', type: 'BUY'}]

我无法控制此文件的格式。我一开始只是为了破解它而做的是从字符串中切掉 "var txns = " 位,然后执行一系列 .replace(old, new, [count] ) 在字符串上,直到它看起来像标准的 JSON:

cleanJSON = malformedJSON.replace("'", '"').replace('apples:', '"apples":').replace('oranges:', '"oranges":').replace('type:', '"type":').replace('{', '{"transaction":{').replace('}', '}}')

现在看起来像:

[{ "transaction" : { "apples": "100", "oranges": "20", "type": "SELL"} }, 
{ "transaction" : { "apples": "200", "oranges": "10", "type": "BUY"} }]

您将如何解决这个格式问题?是否有已知的方法(库、脚本)将 JavaScript 数组格式化为 JSON 表示法?

最佳答案

使用 PyParsing 编写自己的小解析器并不难.

import json
from pyparsing import *

data = """var txns = [
{ apples: '100', oranges: '20', type: 'SELL'},
{ apples: '200', oranges: '10', type: 'BUY'}]"""


def js_grammar():
key = Word(alphas).setResultsName("key")
value = QuotedString("'").setResultsName("value")
pair = Group(key + Literal(":").suppress() + value)
object_ = nestedExpr("{", "}", delimitedList(pair, ","))
array = nestedExpr("[", "]", delimitedList(object_, ","))
return array + StringEnd()

JS_GRAMMAR = js_grammar()

def parse(js):
return JS_GRAMMAR.parseString(js[len("var txns = "):])[0]

def to_dict(object_):
return dict((p.key, p.value) for p in object_)

result = [
{"transaction": to_dict(object_)}
for object_ in parse(data)]
print json.dumps(result)

这将要打印

[{"transaction": {"type": "SELL", "apples": "100", "oranges": "20"}},
{"transaction": {"type": "BUY", "apples": "200", "oranges": "10"}}]

您还可以将赋值添加到语法本身。鉴于已经有现成的解析器,您最好使用它们。

关于javascript - 使用 Python 将 JavaScript 数组转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1144400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com