html - 无法解码 JSON 对象(尽管数据确实存在)

标签 html json python-2.7 urllib2

我是 JSON 新手。我运行了下面的代码并得到了一个错误

import urllib2
import json
urllib2.urlopen('https://ciapipreprod.cityindextest9.co.uk/TradingApi')
print json.load(urllib2.open(`https://ciapipreprod.cityindextest9.co.uk/TradingApi'))

ValueError:无法解码 JSON 对象

但是当我如下所示在没有 json 的情况下运行它时,我可以看到里面的内容。

import urllib2
data=urllib2.urlopen('https://ciapipreprod.cityindextest9.co.uk/TradingApi')
html = data.read()
print html

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<meta name="viewport" content="width=device-width" />

<title>Ajax Test Harness</title>

<link href="/TradingAPI/Content/css?v=oI5uNwN5NWmYrn8EXEybCIbINNBbTM_DnIdXDUL5RwE1" rel="stylesheet" type="text/css" />

<link href="/TradingAPI/Content/themes/base/css?v=M29VGAPKJl__Ya5hV5ngguUfY8uNXwB076bG-JmFavY1" rel="stylesheet" type="text/css" />

<script src="/TradingAPI/Scripts/js?v=lYEohN8Pq3__VMPgz6C4ZXSyFUc0d6gVJQ28Wflqo3E1"></script>

</head>

<body>

    <div style="width: 100%; margin: 0px;">            

        <img alt="CityIndex Logo" src="/TradingAPI/Images/ci_white_logo.jpg"/>

</div>
<h2>Ajax Test Harness</h2>

<script src="/TradingAPI/Scripts/tradingApi.js" language="javascript" type="text/javascript"></script>

<script src="/TradingAPI/Scripts/corsTest.js" language="javascript" type="text/javascript"></script>

<script src="/TradingAPI/Scripts/json2.js" language="javascript" type="text/javascript"></script>

<div id="apitest">

<form id="form1" runat="server"></form>

<hr />
<h2>Test Harness</h2>

<button onclick=" eval($('#code').val()); ">Execute</button><br />

<textarea id="code" cols="120" rows="15">

    var userName = "DM631479";

    doPost('/session',{ "UserName": userName, "Password": "password"}, function (data, textCode) {    

        // Smoke Test

        doGet('/smoketest');



        setRequestHeader("UserName", userName);

        setRequestHeader("Session", data.Session);



        // Authentication Test

        doGet('/smoketest/authenticated');



        // Account Information Tests

        doGet('/useraccount/DM631479/ChartingEnabled');

        doGet('/useraccount/ClientAndTradingAccount');

        // Need Valid Test Data doPost('/useraccount/Save', {"PersonalEmailAddress":"not@realaddress.com","PersonalEmailAddressIsDirty":true})



        // Cfd Markets Test

        doGet('/cfd/markets?marketname=uk&maxresults=10&usemobileshortname=true');



        //Logoff

        doPost('/session/deleteSession?userName='+userName+'&session='+data.Session);

    });

    /* var userName = "DM631479";

        cityindex.corsTesting.doPost('/session',{ "UserName": userName, "Password": "password"}, function (data, textCode) {    

        });*/

    </textarea>

<br />

<select id="result" style="background-color: #e4e4e4; min-height: 300px;" multiple="multiple"></select>

<hr />

</div>



</body>

</html>

我的理解是,如果我的 var 'Data' 中有 '{}',它们就是“字典”,然后我可以使用 JSON 模块调用它们。

也许我误读了变量的内容,也许实际上没有任何 JSON 可以“加载”

如果此处的任何标记有误或不合格,我们深表歉意。

最佳答案

在我看来,该 url 返回的是 html,而不是 json。此外,从 print 语句来看,结果看起来页面中根本没有嵌入任何 json。

json.load 仅适用于看起来完全像 json 的输入,类似于字典的东西。它不会将其从周围的 html 中提取出来。

如果该页面上某处有 json,例如,在脚本标记中,您首先必须解析 html 以提取它。你可以为此使用漂亮的汤或 scrapy。

关于html - 无法解码 JSON 对象(尽管数据确实存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33737082/

相关文章:

html - 分词属性如何从空间中分离出来?

html - 响应式 map 上的标记

setAttribute 中的 javascript onClick 事件

c# - json.net 将字符串反序列化为嵌套类

python - 即使使用 python with 语句,写入文件也无法完成

python - 解决 "Number of subsets without consecutive numbers"时出现OverFlowError

windows - 将 Web 应用程序加载为 Windows 桌面应用程序的简单/最佳方法?

c# - 牛顿软件.Json.JsonReaderException : Additional text encountered after finished reading JSON content:

C++ Boost read_json 崩溃,我有#define BOOST_SPIRIT_THREADSAFE

python - 保龄球调度程序