- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 jquery 进行 ajax 调用,它返回一个 json 数组,并且在某些情况下工作正常。然而,在其他情况下,浏览器(ff 和 IE11)无法解析响应。我将脚本包含在 .jsp 文件中,如下所示:
<script type="text/javascript" charset="utf-8" src="../scripts/test.js"></script>
这是 json 的结构,如 java 控制台中的 servlet 所示:
[{"key":"...","type":"...","content":"..."},
{"key":"...","type":"...","content":"..."},
...]
我的请求看起来像这样:
var url = document.location.origin + "/Servlet",
searchText = $("input[name=search]").val(),
types = getOptions();
$.ajaxSetup({
type: "GET",
url: url,
data: {"operation": "search", "searchText": searchText, "types": types, "resultNumber": 200},
datatype: "json",
success: function(result,status,xhr)
{
showResults(result);
},
cache: false
});
$.ajax();
我的用于创建 JSON 数组的 java 方法:
private JSONArray parseJSON (ArrayList<ResultObject> aResultList) throws JSONException
{
JSONArray resultJSONArray = new JSONArray();
for (ResultObject resultObject : aResultList)
{
JSONObject jsonObject = new JSONObject();
HashMap<String,String> fields = resultObject.getFields();
for (Map.Entry<String, String> entry : fields.entrySet())
{
jsonObject.put(entry.getKey(), entry.getValue());
}
resultJSONArray.put(jsonObject);
}
return resultJSONArray;
}
Servlet 响应如下所示:
protected void doGet(HttpServletRequest aRequest, HttpServletResponse aResponse)
throws ServletException, IOException
{
QueryObject queryObject = new QueryObject();
queryObject.setSearchText(aRequest.getParameter("searchText"));
String[] types = aRequest.getParameterValues("types[]");
queryObject.setTypes(types);
queryObject.setResultNumber(Integer.parseInt(aRequest.getParameter("resultNumber")));
JSONArray results = indexManager.doSearch(queryObject);
System.out.println(results.toString());
aResponse.getWriter().write(results.toString());
aResponse.setContentType("application/json");
// aResponse.setCharacterEncoding("UTF-8");
PrintWriter out = aResponse.getWriter();
out.flush();
}
我用 jquery 解析它,如下所示:
function showResults (resultList)
{
$.each(resultList, function(i, item)
{
console.log(item.key);
});
}
调试显示,有时返回的 JSONarray 不会自动解析为 JSON,而是保留为字符串,这就是 $.each(..)
失败的原因。我无法确定为什么 jquery 解析它时出现问题,因为它没有给我任何错误消息。然而,使用 JSON.parse() 手动解析它告诉我它似乎无效。起初它使用 $.get(...)
执行请求,这在 FF 中运行良好,但在 IE 中则不行(缓存问题)。我认为这是德语特殊字符(元音变音)的问题,但事实并非如此。当 jsonarray 较大时(约 50 个对象或更多),这种情况似乎总是会发生。不幸的是,我无法在这里发布示例 json,因为它包含敏感数据。
我浪费了几个小时来解决这个问题,所以请有人知道这里出了什么问题吗?有没有任何工具可以帮助我验证我的 json 并告诉我它到底为什么无效?或者问题可能是由其他原因造成的?谢谢。
最佳答案
我会发表评论,但因为我还没有 50 名代表...
您可以使用此工具检查您的 JSON 是否有效 https://jsonlint.com/关于 JSON 太大,我不会打赌,JSON 数据 block 或任何字段的大小没有固定限制(为 jvm 分配了适量的堆内存)。各种浏览器的 JavaScript 实现可以处理的 JSON 量是有限的(例如,根据我的经验,大约 40MB)。
关于javascript - Jquery、ajax 和 JSON : Parsing GET response fails, 但只是有时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45418897/
最近开始学习MongoDB。今天老师教了我们 mongoexport 命令。在练习时,我遇到了一个典型的问题,包括教练在内的其他同学都没有遇到过。我在我的 Windows 10 机器上使用 Mongo
我是 JSON Schema 的新手,读过什么是 JSON Schema 等等。但我不知道如何将 JSON Schema 链接到 JSON 以针对该 JSON Schema 进行验证。谁能解释一下?
在 xml 中,我可以在另一个 xml 文件中包含一个文件并使用它。如果您的软件从 xml 获取配置文件但没有任何方法来分离配置,如 apache/ngnix(nginx.conf - site-av
我有一个 JSON 对象,其中包含一个本身是 JSON 对象的字符串。我如何反序列化它? 我希望能够做类似的事情: #[derive(Deserialize)] struct B { c: S
考虑以下 JSON { "a": "{\"b\": 12, \"c\": \"test\"}" } 我想定义一个泛型读取 Reads[Outer[T]]对于这种序列化的 Json import
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 11 个月前关闭。 Improve
我的旧项目在 MySQL 中有 Standard JSON 格式的数据。 对于我在 JS (Node.js) 和 DynamoDB 中的全新项目,关于 Standard JSON格式: 是否建议将其转
JSON 值字符串、数字、true、false、null 是否是有效的 JSON? 即,是 true 一个有效的 JSON 文档?还是必须是数组/对象? 一些验证器接受这个(例如 http://jso
我有一个 JSON 字符串,其中一个字段是文本字段。这个文本字段可以包含用户在 UI 中输入的文本,如果他们输入的文本是 JSON 文本,也许是为了说明一些编码,我需要对他们的文本进行编码,以便它不会
我正在通过 IBM MQ 调用处理数据,当由 ColdFusion 10 (10,0,11,285437) 序列化时,0 将作为 +0.0 返回,它会导致无效的 JSON并且无法反序列化。 stPol
我正在从三个数组中生成一个散列,然后尝试构建一个 json。我通过 json object has array 成功了。 require 'json' A = [['A1', 'A2', 'A3'],
我从 API 接收 JSON,响应可以是 30 种类型之一。每种类型都有一组唯一的字段,但所有响应都有一个字段 type 说明它是哪种类型。 我的方法是使用serde .我为每种响应类型创建一个结构并
我正在下载一个 JSON 文件,我已将其检查为带有“https://jsonlint.com”的有效 JSON 到文档目录。然后我打开文件并再次检查,结果显示为无效的 JSON。这怎么可能????这是
我正在尝试根据从 API 接收到的数据动态创建一个 JSON 对象。 收到的示例数据:将数据解码到下面给出的 CiItems 结构中 { "class_name": "test", "
我想从字符串转换为对象。 来自 {"key1": "{\n \"key2\": \"value2\",\n \"key3\": {\n \"key4\": \"value4\"\n }\n
目前我正在使用以下代码将嵌套的 json 转换为扁平化的 json: import ( "fmt" "github.com/nytlabs/gojsonexplode" ) func
我有一个使用来自第三方 API 的数据的应用程序。我需要将 json 解码为一个结构,这需要该结构具有“传入”json 字段的 json 标签。传出的 json 字段具有不同的命名约定,因此我需要不同
我想使用 JSON 架构来验证某些值。我有两个对象,称它们为 trackedItems 和 trackedItemGroups。 trackedItemGroups 是组名称和 trackedItem
考虑以下案例类模式, case class Y (a: String, b: String) case class X (dummy: String, b: Y) 字段b是可选的,我的一些数据集没有字
我正在存储 cat ~/path/to/file/blah | 的输出jq tojson 在一个变量中,稍后在带有 JSON 内容的 curl POST 中使用。它运作良好,但它删除了所有换行符。我知
我是一名优秀的程序员,十分优秀!