【问题标题】:Convert JSON string in html into JSON object将 html 中的 JSON 字符串转换为 JSON 对象
【发布时间】:2016-07-19 05:14:27
【问题描述】:

我从 MarkitOnDemand API 中检索到一些 JSON 格式的数据,我想要的 JSON 内容在 html 字符串的 body 标记内,如下所示:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>jQuery Autocompelete</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script> 
</head>
<body>
{"Status":"SUCCESS","Name":"Apple Inc","Symbol":"AAPL","LastPrice":109.59,"Change":1.91,"ChangePercent":1.77377414561664,"Timestamp":"Wed Mar 30 15:59:00 UTC-04:00 2016","MSDate":42459.6659722222,"MarketCap":607630850970,"Volume":3211276,"ChangeYTD":105.26,"ChangePercentYTD":4.11362340870226,"High":110.41,"Low":108.6,"Open":108.64}</body>
</html>

上面的html字符串代码在下面我的AJAX调用的“data”字符串中:

$(function(){
    $('#searchform').on('submit', function(event){
        event.preventDefault();

        var requestdata = 'symbol=' + $('#query').val();
        $.ajax({
            url: "receivesearch.php",
            method: "get",
            data: requestdata,
            success: function(data){  //html string in this data parameter

                //CONFUSED HERE

            }
        });
    });
});

但我没能从 body 标签中取出 JSON 字符串并将其解析为 JSON 对象...

谁能帮我解决这个问题?非常感谢!!

这是我的 php 代码:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>jQuery Autocompelete</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script> 
</head>
<body>
<?php
    if(isset($_GET['symbol'])){
        $lookupURL = "http://dev.markitondemand.com/MODApis/Api/v2/Quote/json?symbol=" . $_GET['symbol'];
        $jsonhtml = file_get_contents($lookupURL);
        echo $jsonhtml;
    }
?>
</body>
</html>

【问题讨论】:

  • 你为什么要这样发送而不是application/json 输出?发送 json 并包含额外的脚本似乎是一种愚蠢的方式
  • JSON.parse(data)
  • var obj = $.parseJSON( $('body').html())
  • 您是否尝试将headers: { Accept : "application/json; charset=utf-8", "Content-Type": "application/json; charset=utf-8" } 添加到您的ajax 请求中?
  • Http Get 方法不能包含有效负载,因此您不能在 $.ajax 调用中使用 data 参数。

标签: javascript jquery html json ajax


【解决方案1】:

Markit On Demand API 支持 JSON,因此您的原始查询有问题。

查看此 URL 以获取示例:
http://dev.markitondemand.com/MODApis/Api/v2/Quote/json?symbol=AAPL

返回纯JSON数据,可以使用$.parseJSON(data)处理

更新:试试这个代码,例如:

var requestData = 'symbol=AAPL';
$.ajax({
    url: "http://dev.markitondemand.com/MODApis/Api/v2/Quote/json",
    method: "get",
    data: requestdata,
    success: function(data){  //html string in this data parameter
        $symbolResponse = $.parseJSON(data);
    }
});

更新 2:使用此 PHP 代码:(仅此代码,仅此而已)

<?php

if (isset($_GET['symbol'])) {
    header('Content-Type: application/json');
    $lookupURL = "http://dev.markitondemand.com/MODApis/Api/v2/Quote/json?symbol=" . $_GET['symbol'];
    $jsonhtml = file_get_contents($lookupURL);
    echo $jsonhtml;
}

?>

【讨论】:

  • 所以我尝试在 $.ajax() 中使用 dataType: "json",但它无法检索 JSON 数据的结果。我使用以下代码调用 api: if(isset($_GET['symbol'])){ $lookupURL = "dev.markitondemand.com/MODApis/Api/v2/Quote/json?symbol=" 。 $_GET['符号']; $jsonhtml = file_get_contents($lookupURL);回声 $jsonhtml; }
  • 非常感谢!它确实有效!但是我只是想知道为什么我使用php作为代理的原始代码不起作用,请给我一些提示吗?
  • @Paul 您是否尝试过让您的 PHP 代理调用此处列出的 URL:dev.markitondemand.com/MODApis/Api/v2/Quote/json?也许在原始问题中发布您的 PHP 代码。
  • 再次感谢蒂姆!现在,我的 php 代码已添加到原始问题的上方。 @蒂姆奥格威
  • @Paul 看到我更新的答案。从 PHP 文件中删除 html。
【解决方案2】:

您可以选择JSON.parse(data)$.parseJSON(data) 或不建议的eval(data)

【讨论】:

    【解决方案3】:

    您需要对结果进行两次解析:一次是使用$.parseHTML() 作为HTML,然后您可以从中获取文本并将其传递给$.parseJSON()

    类似的东西:

    success: function(data){  //html string in this data parameter
        var html = $.parseHTML(data);
        var body = $(html).text();
        var json = $.parseJSON(body);
        // use the JSON data here
    }
    

    【讨论】:

    • 谢谢,我已经用你的代码尝试过类似的东西,但是有一个错误“SyntaxError: JSON.parse: unexpected character at line 5 column 3 of the JSON data”,不知道为什么发生。
    • 嗯,PHP 代理的信息是必不可少的。如果正文是纯 JSON 数据,我的代码可以正常工作(这不是因为您的代理没有对结果进行 HTML 编码,因此 JSON 中的任何 &lt;&amp; 都会使 HTML 无效)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2021-09-18
    相关资源
    最近更新 更多