json文件中的“期望用双引号括起来的属性名称”

Posted

技术标签:

【中文标题】json文件中的“期望用双引号括起来的属性名称”【英文标题】:"Expecting property name enclosed in double quotes" in json file 【发布时间】:2019-04-24 06:34:00 【问题描述】:

这是json文件

"pre_trigger": 4, "sampling frequency": 1652, "record length": 15.0, 
"sensors": 
["model": "393B05", "serial": "46978", "sensitivity": 10030, "sensitivity_units": "mV/g", "sensor_type": "Accelerometer", "units": "g", "location": [7.01, -0.19, 0], "location_units": "m", "direction": [0, 0, 1], "trigger": true, "trigger_value": 0.005, "max_val": 0.45, "min_val": -0.45, "comments": "Inside B122 next to bookshelf", "channel": "cDAQ1Mod2/ai0"],

["model": "393B05", "serial": "47085", "sensitivity": 9980, "sensitivity_units": "mV/g", "sensor_type": "Accelerometer", "units": "g", "location": [9.65, -0.19, 0], "location_units": "m", "direction": [0, 0, 1], "trigger": true, "trigger_value": 0.005, "max_val": 0.45, "min_val": -0.45, "comments": "Inside B122 under the whiteboard", "channel": "cDAQ1Mod2/ai1"] 

"parameters": "general": [], "specific": ["Walking direction", "Person ID"]

我不是一个懂编码的人,所以我不知道这个错误真正来自哪里。我正在运行以下命令

daq = DAQ()
daq.load_setup('json.fname')

返回属性错误。 json文件中没有单引号,所以我真的不知道问题出在哪里。下面是错误回调的地方。

 def load_setup(self,fname='setup.json'):
    """
    Opens the JSON file containing the setup parameters for the experiment.

    Parameters
    ----------
    fname : str
        File that the parameters for the experiment were saved into (JSON file)

    """
    import json

    with open(fname, 'r') as setup_file:
        setup_data = json.load(setup_file)

    self.fs = setup_data['sampling frequency']
    self.record_length = setup_data['record length']
    self.sensors = setup_data['sensors']
    self.parameters = setup_data['parameters']
    self.pre_trigger = setup_data['pre_trigger']

【问题讨论】:

没有足够的信息,因此我们可以尝试您的代码案例并了解问题。您能否添加更多代码,例如类的代码,并更好地解释您尝试通过这两行实现的目标。但是,让我猜猜,如果您使用传递的字符串exec() 执行函数,我认为您正在访问 json 对象上没有的属性。 是的,我会尝试的。我将在错误回调的位置添加到上面。 【参考方案1】:

您根本没有有效的 JSON(您的 Python 代码没有任何问题)。您没有正确使用数组功能。 JSON 数组如下所示:

"some_array": ["first item", "second item", ..., "last item"]

看起来像这样(这就是你所拥有的以及为什么你会得到你得到的错误):

"some_array": ["first item"], ["second item"], ..., ["last item"]

长话短说,您的列表项以逗号分隔在方括号内。这是您的 JSON 应该是什么样子(sensor 数组已修复,打印效果很好):


    "pre_trigger": 4,
    "sampling frequency": 1652,
    "record length": 15.0,
    "sensors":
    [
        
            "model": "393B05",
            "serial": "46978",
            "sensitivity": 10030,
            "sensitivity_units": "mV/g",
            "sensor_type": "Accelerometer",
            "units": "g",
            "location": [7.01, -0.19, 0],
            "location_units": "m",
            "direction": [0, 0, 1],
            "trigger": true,
            "trigger_value": 0.005,
            "max_val": 0.45,
            "min_val": -0.45,
            "comments": "Inside B122 next to bookshelf",
            "channel": "cDAQ1Mod2/ai0"
        ,
        
            "model": "393B05",
            "serial": "47085",
            "sensitivity": 9980,
            "sensitivity_units": "mV/g",
            "sensor_type": "Accelerometer",
            "units": "g",
            "location": [9.65, -0.19, 0],
            "location_units": "m",
            "direction": [0, 0, 1],
            "trigger": true,
            "trigger_value": 0.005,
            "max_val": 0.45,
            "min_val": -0.45,
            "comments": "Inside B122 under the whiteboard",
            "channel": "cDAQ1Mod2/ai1"
        
    ],

    "parameters": 
        "general": [],
        "specific":
        [
            "Walking direction",
            "Person ID"
        ]
    

我建议始终保持您的 JSON 打印良好(即使在磁盘上),因为这样更易于阅读/理解。 JSON 格式的部分吸引力在于,您可以像人类一样轻松地观察它。

您发布的其余代码在此修复后运行良好。

HTH。

【讨论】:

很抱歉回复晚了,但这有效!非常感谢。 @newtothis 很高兴能帮上忙!如果它是正确的答案,您也可以接受(在您投票的位置旁边打勾)。

以上是关于json文件中的“期望用双引号括起来的属性名称”的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jenkins 管道上的 AWS cli “期望用双引号括起来的属性名称”

循环使用特定符号的 JSON 文件

位置 0 处 JSON 中的意外标记 J

如何添加到 node.js 中的现有 json 文件

如何通过D3.js中的JSON文件解析按键对对象进行排序[重复]

如何将 JSON 文件中的数据导入嵌入?