【问题标题】:malformed JSON string格式错误的 JSON 字符串
【发布时间】:2014-04-24 12:15:07
【问题描述】:

我是从 xml 文件调用的,我基本上只是想将 xml 文件中的数据转换为 json,这就是我所拥有的

my $url ="someURL"
my $req = HTTP::Request->new(GET => $url);
$req->content_type('application/json');
my $json = new JSON;
my $request_json = $json->allow_blessed->encode($req);
$req->content($request_json);
my $lwp       = LWP::UserAgent->new;
my $response  = $lwp->request($req);
my $response_json = $response->content;
my $parsed    = $json->allow_nonref->utf8->relaxed->decode($response_json);

最后一行给出以下响应:

malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "<mytag...")

【问题讨论】:

  • Re "我基本上只是想把 xml 文件中的数据转换成 json",你的代码中没有任何东西与 XML 有任何关系???
  • Re“我基本上只是想将 xml 文件中的数据转换为 json”。 JSON 创建了一个数据结构。您需要从构建正确的数据结构开始。您必须首先确定您拥有的 XML 的正确数据结构是什么。
  • 为什么标记为template-toolkitsomeURL 是 XML 文档吗?您为什么要尝试对 HTTP::Request 对象进行 JSON 编码?

标签: xml json perl


【解决方案1】:

看看你的这些代码行

my $req = HTTP::Request->new(GET => $url);
$req->content_type('application/json');

没关系。您创建了一个 HTTP::Request 对象,该对象向 URL 发出 GET 请求,并且您在该请求中设置了一个标头,表明 content 将是 JSON 数据。现在需要做的就是添加 JSON 数据。

现在这非常奇怪

my $json = new JSON;
my $request_json = $json->allow_blessed->encode($req);
$req->content($request_json);

您已将整个 HTTP::Request 对象编码为 JSON,并将其设置为对象的内容。

我希望你能明白这不是它应该的工作方式? HTTP 请求不应将自身的副本作为数据内容发送。

应该添加的内容我无法确定,因为它是您向其发送请求的站点的属性。通常它是对您要进行的查询的描述,在这种情况下被表述为 JSON 字符串。

如果这对您没有足够的帮助,那么您必须告诉我们更多关于您尝试查询的网站的信息。

【讨论】:

  • 回复“没关系”,不完全是。 Content-Type 对 GET 请求没有意义,因为 GET 请求不能包含内容。
  • @ikegami:不正确:这肯定是一件非常奇怪的事情,但非常合法。
  • 合法,是的*。正确,不。请求没有内容,服务器肯定不会期待内容,除非它期待 POST(正如我之前总结的),并且 OP 可能意味着使用 Accept 标头。
  • * -- 实际上,RFC 2616 定义了一个 Content-Type 标头,但忘记将其列为任何消息的有效标头,无论是请求还是响应!
【解决方案2】:

我基本上只是想把 xml 文件中的数据转换成 json

JSON 通常是由数组、哈希、字符串和数字组成的数据结构。一旦你有了这个,你需要做的就是

my $json = encode_json($data);

所以你需要建立正确的数据结构。既然你没有告诉我们那是什么,我想你甚至还没有决定它是什么。这是你必须做的第一件事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2011-01-27
    • 2016-03-16
    相关资源
    最近更新 更多