【问题标题】:How to add an element to json file in perl [closed]如何在perl中向json文件添加元素[关闭]
【发布时间】:2022-01-21 17:06:24
【问题描述】:

要更改 json 文件的 md5 checksum,我在 httpd.conf 中使用以下过滤器:

ExtFilterDefine jsonfilter mode=output intype=application/json cmd="/usr/bin/perl -pe 'END { unless (-f q{/tmp/md5_filter.tmp}) { print qq(\\n\,\"STRING\"\: \") . time() . qq(\x0D\"\\n) }'"

但是在过滤器运行之后,我收到一个错误,可能是因为在最后一个括号} 之后添加了新的字符串/时间戳并导致json 格式无效:

SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data at line 224 column 2 of the JSON data

有人知道如何正确运行吗?只是为了确定:我只想在文件响应客户端浏览器之前更改文件的输出。我不想更改原始文件本身。这应该保持不变。

【问题讨论】:

    标签: json apache perl md5


    【解决方案1】:

    可能是因为在最后一个括号 } 之后添加了新字符串/时间戳,并导致 json 格式无效

    我不知道你工作环境的任何细节,但我怀疑你的怀疑在这里是正确的。

    您可以尝试修复您的字符串操作解决方案(也许通过在处理输入的最后一行时解决,然后在打印右大括号之前打印您的加法。但最好的解决方案是将输入收集到单个字符串,然后使用 JSON 解析器对其进行处理。

    类似这样的东西(未经测试):

    perl -MJSON -ne '$json .= $_; END { my $data = decode_json($json); $data->{STRING} = time; print encode_json($data);'
    

    更新:解释我的代码的各个部分。

    • -MJSON - 加载 JSON 模块
    • -ne - n 迭代输入(依次将每一行放入 $_); e 从命令行执行代码
    • $json .= $_ - 这是针对输入的每一行运行的。它只需要每一行并将它们全部聚集在一个名为 $json 的变量中
    • END { ... } - 这段代码只运行一次 - 在输入全部被读取之后
    • my $data = decode_json($json) - 获取 JSON 文本字符串(现在存储在 $json 中)并将其解码为 Perl 数据结构。该数据结构存储在$data
    • $data->{STRING} = time - 向数据结构添加另一个键/值对
    • print encode_json($data) - 将更改后的数据结构编码回 JSON 字符串并将该字符串打印到 STDOUT

    【讨论】:

    • 感谢您的建议。您能否描述一下您的代码的单个部分?我真的很感激,因为我没有太多的编程经验。如果有人通过浏览器或 curl 命令请求 json 文件,这会直接更改文件中的 json 文件还是仅更改其输出?
    • 不幸的是,我没有收到您的代码的任何输出。只是一个空白页,没有错误消息。
    • 这是一个明确的问题。我应该改变什么?
    • @cr4nk:恐怕我不知道。正如我上面所说,我不了解您正在工作的环境,所以我只是复制了您现有代码的工作方式。我的代码从STDIN 读取输入(我希望是HTTP 响应正文)并将修改后的输出写入STDOUT。可能是您的服务器没有安装 JSON 模块。您可能需要安装它(或者您可以切换到使用 JSON::PP - 这会更慢 - 相反)。
    • 这是一个明确的问题。我应该改变什么? StackOverflow 是一个程序员互相帮助解决问题的论坛。我们都是这里的志愿者,虽然我们很乐意在可能的时候提供帮助,但我们都有真实的生活,我们不能总是立即回复——特别是如果(就像这里的情况一样)我们在不同的时区.
    猜你喜欢
    • 2011-09-03
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2021-02-16
    • 1970-01-01
    • 2012-11-16
    相关资源
    最近更新 更多