无法解码 JSON 个对象(尽管数据确实存在)
No JSON object could be decoded (although data does exist)
我是 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: No JSON object could be decoded
但是当我 运行 它没有 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' 中有“{}”,它们就是 "dictionaries",然后我可以使用 JSON 模块调用它们。
也许我误读了变量的内容,也许 JSON 到 'load'
实际上没有任何内容
如果此处的任何标记有误或不合格,我们深表歉意。
JSON 有 a particular specified shape ,该响应不符合。你所拥有的是嵌入在 HTML 中的 JavaScript(有些 JavaScript 是有效的 JSON)。它类似于这个例子:
<pre><code>print("Hello World")</code></pre>
其中 包含 Python 代码,但总的来说不是有效的 Python 代码。为了提取数据,您需要找到一个不同的端点来命中,该端点会产生有效的 JSON(否则您将不得不提取 JavaScript 上的 JSON-like 部分使用 html.parser
built into the standard library, a library like bs4 或正则表达式搜索您感兴趣的页面)。然后您可以将有效的 JSON 文本提供给 json.loads
并使用它。
在我看来 url returns html,而不是 json。此外,从 print 语句来看,结果看起来页面中根本没有嵌入任何 json。
json.load 仅适用于看起来与 json 完全相同的输入,即看起来像字典的东西。它不会把它从周围的 html 中拉出来。
如果该页面上的某处有 json,例如,在脚本标记中,您首先必须解析 html 以提取它。你可以用漂亮的汤或 scrapy 来做。
我是 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: No JSON object could be decoded
但是当我 运行 它没有 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' 中有“{}”,它们就是 "dictionaries",然后我可以使用 JSON 模块调用它们。
也许我误读了变量的内容,也许 JSON 到 'load'
实际上没有任何内容如果此处的任何标记有误或不合格,我们深表歉意。
JSON 有 a particular specified shape ,该响应不符合。你所拥有的是嵌入在 HTML 中的 JavaScript(有些 JavaScript 是有效的 JSON)。它类似于这个例子:
<pre><code>print("Hello World")</code></pre>
其中 包含 Python 代码,但总的来说不是有效的 Python 代码。为了提取数据,您需要找到一个不同的端点来命中,该端点会产生有效的 JSON(否则您将不得不提取 JavaScript 上的 JSON-like 部分使用 html.parser
built into the standard library, a library like bs4 或正则表达式搜索您感兴趣的页面)。然后您可以将有效的 JSON 文本提供给 json.loads
并使用它。
在我看来 url returns html,而不是 json。此外,从 print 语句来看,结果看起来页面中根本没有嵌入任何 json。
json.load 仅适用于看起来与 json 完全相同的输入,即看起来像字典的东西。它不会把它从周围的 html 中拉出来。
如果该页面上的某处有 json,例如,在脚本标记中,您首先必须解析 html 以提取它。你可以用漂亮的汤或 scrapy 来做。