为啥某些浏览器无法获取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文件里加了一段插入数据库的功能,能访问的浏览器可以正常插入数据,不能的就没有插入。我都困扰了,谢谢各位。

参考技术A json不是标准javascript类型,某些浏览器不支持
解决办法:
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。

我在我的程序中发现了一个问题,float32s 不是 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 的其他任何东西都无效。 floatfloat_float64 都可以,但 float16float32 不行。

为什么会这样?显然,它们都可以很容易地转换为字符串,堆栈跟踪甚至显示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 兼容类型不适用。

【讨论】:

那为什么float64float_ 工作? &gt;&gt;&gt; np.float64 is float&gt;&gt;&gt; np.float_ is float 都返回 False 你也可以看看__mro__np.float64.__mro__ 包括 float,np.float32.__mro__` 不包括。

以上是关于为啥某些浏览器无法获取JSON?的主要内容,如果未能解决你的问题,请参考以下文章

为啥恶意站点在攻击前无法通过 GET 获取 CSRF 令牌?

为啥浏览器获取不了我电脑上的文件

为啥我的wordpress无法编写和更新文章?

为啥返回后变量提升在某些浏览器上有效,而在某些浏览器上无效?

ajax为啥不能导出文件

为啥此输入类型=时间在某些带有“stepMismatch”的浏览器中无效:true?