为啥某些浏览器无法获取JSON?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥某些浏览器无法获取JSON?相关的知识,希望对你有一定的参考价值。
各位好,我遇到了一个难题,我想在前台用jquery的getJSON想获取json数据。现在遇到的麻烦是,我测试了有些浏览器可以正常执行(chrome跟safari可以),有些浏览器却不能(360跟IE不可以)。下面贴出代码:
index.html:
<html><head><title>5S</title> <link rel="stylesheet" href="css/jquery.mobile-1.3.2.min.css"> <link rel="stylesheet" href="css/index.css"><script src="js/jquery-1.8.3.min.js"></script><script src="js/jquery.mobile-1.3.2.min.js"></script> <script src="js/index.js"></script> </head> <body> </body></html>
index.js:
pv_gsshowdept = "";
$(document).ready(function()$("#fm_gs_show").bind('pagebeforeshow', function(event) //alert(pv_gsshowdept); $$("fm_gs_show_h").innerHTML = pv_gsshowdept; $("#fm_gs_show_imgdiv").empty(); var myjson = "http://192.168.0.30:81/fkfs/jsons/json_deptimprove.php?dept="+$.trim(pv_gsshowdept);// console.log("json语句是:"+myjson);alert("json语句是:"+myjson);$.getJSON(myjson, function(data) $.each(data, function(k, v) // alert(v);var mystr = " <div> <img src='files/pr/"+$.trim(pv_gsshowdept)+"/"+v+"' style='width:100%; height:auto;' /> <p>"+v+"</p> </div>" ;// console.log(v+mystr);$("#fm_gs_show_imgdiv").append(mystr); ) ); ););
代码就是这么多了,我为了验证,在PHP文件里加了一段插入数据库的功能,能访问的浏览器可以正常插入数据,不能的就没有插入。我都困扰了,谢谢各位。
解决办法:
1.要么引入json.js定义
2.要么引入jQuery(含json定义)
3.不使用JSON.parse和stringify方法,仅仅定义JSON结构的对象
a:'1',b:'2'本回答被提问者和网友采纳
为啥某些 numpy 数据类型 JSON 可序列化而其他数据类型不可序列化?
【中文标题】为啥某些 numpy 数据类型 JSON 可序列化而其他数据类型不可序列化?【英文标题】:Why are some numpy datatypes JSON serializable and others not?为什么某些 numpy 数据类型 JSON 可序列化而其他数据类型不可序列化? 【发布时间】:2017-11-11 13:16:05 【问题描述】:Numpy有很多不同的基本类型,都是listed here。
我在我的程序中发现了一个问题,float32
s 不是 JSON 可序列化的,所以我开始测试上面列表中的所有数据类型:
>>> import numpy as np
>>> from json import dumps
>>> dumps(np.bool(True))
'true'
>>> dumps(np.bool_(True))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.4/json/__init__.py", line 230, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python3.4/json/encoder.py", line 192, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python3.4/json/encoder.py", line 250, in iterencode
return _iterencode(o, 0)
File "/usr/lib/python3.4/json/encoder.py", line 173, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: True is not JSON serializable
>>> dumps(np.int(0))
'0'
>>> dumps(np.int_(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.intc(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.intp(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.int8(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.int16(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.int32(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.int64(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.uint8(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.uint16(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.uint32(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.uint64(0))
Traceback (most recent call last):
[...]
TypeError: 0 is not JSON serializable
>>> dumps(np.float(0))
'0.0'
>>> dumps(np.float_(0))
'0.0'
>>> dumps(np.float16(0))
Traceback (most recent call last):
[...]
TypeError: 0.0 is not JSON serializable
>>> dumps(np.float32(0))
Traceback (most recent call last):
[...]
TypeError: 0.0 is not JSON serializable
>>> dumps(np.float64(0))
'0.0'
>>> dumps(np.complex(0))
Traceback (most recent call last):
[...]
TypeError: 0j is not JSON serializable
>>> dumps(np.complex_(0))
Traceback (most recent call last):
[...]
TypeError: 0j is not JSON serializable
>>> dumps(np.complex64(0))
Traceback (most recent call last):
[...]
TypeError: 0j is not JSON serializable
>>> dumps(np.complex128(0))
Traceback (most recent call last):
[...]
TypeError: 0j is not JSON serializable
所以,没有complex
类型是可序列化的,这是有道理的。
但bool
有效,bool_
无效。 int
有效,但名称中带有 int
的其他任何东西都无效。 float
、float_
和 float64
都可以,但 float16
和 float32
不行。
为什么会这样?显然,它们都可以很容易地转换为字符串,堆栈跟踪甚至显示repr()
被用来显示它们的值。 这可能是无意的吗?或者这种行为有充分的理由吗?
【问题讨论】:
您是直接创建np.float32(...)
对象吗?或者它是从数组中提取的?是否尝试序列化 arr.tolist()
等效项?
如果需要序列化数组的元素,可以考虑使用.item()
方法将其转换为Python标量。
另见***.com/questions/27050108/…Convert numpy type to python
【参考方案1】:
JSON 可序列化的数据类型都是 Python 内置的:
>>> np.int is int
True
>>> np.float is float
True
>>> np.bool is bool
True
因此,您展示的所有 NumPy 数据类型都不是 JSON 可序列化的。至少是一致的。
np.float
_ 与np.float64
相同(在 MacOS 上测试):
>>> np.float_ is np.float64
True
帮助说:
np.float64
64 位浮点数。字符代码“d”。 Python 浮点数 兼容。
鉴于:
np.float32
32 位浮点数。字符代码“f”。兼容 C 浮点数。
因此,Python 浮点兼容类型适用于 json.dumps()
,但 C 兼容类型不适用。
【讨论】:
那为什么float64
和float_
工作? >>> np.float64 is float
和 >>> np.float_ is float
都返回 False
。
你也可以看看__mro__
。 np.float64.__mro__
包括 float
,np.float32.__mro__` 不包括。以上是关于为啥某些浏览器无法获取JSON?的主要内容,如果未能解决你的问题,请参考以下文章
为啥恶意站点在攻击前无法通过 GET 获取 CSRF 令牌?