遍历JSON、获取JSON长度的方法

本文介绍了如何使用jQuery的$.each方法遍历JSON数组,并解释了如何处理JSON字符串及获取不同类型的JSON对象长度的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、$.each遍历json对象

查看一个简单的jQuery的例子来遍历一个JavaScript数组对象。

var json = [
    {"id":"1","tagName":"apple"},
    {"id":"2","tagName":"orange"},
    {"id":"3","tagName":"banana"},
    {"id":"4","tagName":"watermelon"},
    {"id":"5","tagName":"pineapple"}
];
 
$.each(json, function(i, obj) {
    alert(obj.tagName);
});
上面的代码片断工作正常,提示 “apple”, “orange” … 等,如预期一样。


问题1: JSON 字符串。
下面的例子中,声明了一个JSON字符串(随附单或双引号)直接地。
var json = '[
	{"id":"1","tagName":"apple"},
	{"id":"2","tagName":"orange"},
	{"id":"3","tagName":"banana"},
	{"id":"4","tagName":"watermelon"},
	{"id":"5","tagName":"pineapple"}
	]';
 
$.each(json, function(i, obj) {
    alert(obj.tagName);
});
在Chrome中,它显示在控制台下面的错误:
Uncaught SyntaxError: Unexpected token ILLEGAL
解决方案:JSON字符串转换为JavaScript对象。
要修复它,通过标准JSON.parse()或jQuery 的 $.parseJSON 将其转换为JavaScript对象。
var json = '[
	{"id":"1","tagName":"apple"},
	{"id":"2","tagName":"orange"},
	{"id":"3","tagName":"banana"},
	{"id":"4","tagName":"watermelon"},
	{"id":"5","tagName":"pineapple"}
	]';
 
$.each(JSON.parse(json), function(i, obj) {
    alert(obj.tagName);
});
 
//or 
 
$.each($.parseJSON(json), function(i, obj) {
    alert(obj.tagName);
});

二、json数组有长度json.arrayname.length,如果单纯是json格式,那么不能直接使用json.length方式获取长度,而应该使用其他方法。(注:arrayname为数组名)
例1:
现在有json1数据如下:
var json1={
	"abc":[
		{"name":"txt1"},
		{"name","txt2"}
	]
};
以上遍历的方法是:
for(var i=0;i<json1.abc.length;i++){

	alert(json1.abc[i].name);

}
这里的json1.abc是一个数组,数组是由2个子json组成的,数组是有length属性的,而普通的json是没有该属性的。

例2:
现在有json2数据如下:
var json2={"name":"txt1","name2":"txt2"};
json本身没有length属性,所以用length属性自然会出错。
for(var i=0;i<json2.length;i++){

	alert(json2[i].text);

}
以上脚本执行时,将会出错。


那么要遍历这样的json怎么办呢?
我们可以这么做:
for(var js2 in json2){

	alert( js2 + "=" + json2[js2]);

}

既然json没有length属性,如果要知道他的长度怎么办呢?
很简单,把上面的遍历改一下就是了:
var jslength=0;

for(var js2 in json2){

	jslength++;

}

把这段代码写成一个方法,以后调用就行了:
function getJsonLength(jsonData){

	var jsonLength = 0;

	for(var item in jsonData){

		jsonLength++;

	}

	return jsonLength;

}

学习计算机编程技术一定要严谨认真,容不得半点马虎,学习最重要是把基础打牢,囫囵吞枣、不求甚解会给工作和学习带来很多隐患,效率上必须打折扣。写下来以自勉!

<think>首先,用户的问题是:“我想使用Java遍历JSON数据的方法 请问java 遍历 json 数据的示例代码”。这直接要求提供Java代码示例来遍历JSON数据。 我需要参考提供的引用内容,这些是关于JSON处理的Java代码示例。虽然这些引用不是用户直接的需求,但它们提供了上下文和示例。 - 引用[1]:讨论遍历JSONArray。 - 引用[2]:包含遍历JSONArray的代码示例。 - 引用[3]:提到二维数组JSON。 - 引用[4]:讨论遍历JsonObject对象。 用户的问题是关于遍历JSON数据的,所以我应该专注于遍历JSONArray和JSONObject。 我的回答需要: - 使用中文回答。 - 结构清晰,逐步解决问题。 - 保证回答真实可靠。 - 在回答中引用的段落末尾自然地添加引用标识。 - 生成相关问题。 - 所有行内数学表达式使用$...$格式,但这里可能不涉及数学表达式,因为主题是JSON处理。 - 独立公式使用$$...$$格式,但同样,可能不需要。 用户的问题中没有数学内容,所以我可以忽略数学格式要求。 回答结构: 1. **介绍**:简要解释JSON遍历的重要性。 2. **步骤**:逐步展示如何遍历JSON数据。 3. **代码示例**:提供Java代码示例,使用JSON库如org.json或Gson。 4. **解释**:解释代码。 5. **相关问题**:生成相关问题。 使用什么JSON库?引用[2]使用了JSONObject和JSONArray,这似乎是org.json库。引用[4]也提到了JsonObject。我应该使用org.json库,因为它常见且简单。 在Java中,常见的JSON库有org.json、Gson、Jackson等。引用中使用了org.json,所以我将使用它。 步骤: 1. 添加依赖:需要引入JSON库。 2. 解析JSON字符串。 3. 遍历JSON对象或数组。 代码示例: - 遍历JSONObject:键值对。 - 遍历JSONArray:数组元素。 从引用[2]: ```java String str ="[{'otitle':'会','source':'7'},{'otitle':'不会','source':'3'}]"; JSONArray jsonArray=JSONArray.fromObject(str); for(int i=0;i<jsonArray.size();i++){ JSONObject job = jsonArray.getJSONObject(i); System.out.println(job.get("otitle")+":"+job.get("source")) ; } ``` 我需要确保代码正确。引用[2]使用了JSONArray.fromObject,但在org.json中,JSONArray的构造函数需要JSON字符串。 在org.json库中,创建JSONArray是`new JSONArray(str)`,而不是`JSONArray.fromObject`。可能引用使用了不同的库,如json-lib。 为了准确,我应该使用标准的org.json库。 标准org.json库用法: - 添加依赖:如`org.json:json:20210307`。 - 解析:`JSONObject obj = new JSONObject(jsonString);` 或 `JSONArray arr = new JSONArray(jsonArrayString);` 在引用[2]中,它使用了`JSONObject.fromObject`和`JSONArray.fromObject`,这可能是json-lib库。但为了通用性,我使用org.json。 用户可能没有指定库,所以我可以选择org.json。 在回答中,我应该指定库。 生成相关问题: - 基于JSON遍历,如性能、错误处理、不同库比较等。 引用标识:在回答中,如果引用内容,添加[^n],但引用是提供的,不是我的回答的一部分。系统指令说:“回答中引用的段落末尾自然地添加引用标识”,但这里我引用的是提供的引用内容。 参考站内引用:引用[1]到[4]是提供的,我应该参考它们。 在回答中,我可以提到这些引用作为示例。 最终回答结构: 1. 介绍JSON遍历。 2. 使用org.json遍历JSONObject。 3. 使用org.json遍历JSONArray。 4. 代码示例。 5. 解释。 6. 相关问题。 代码使用中文注释?指令说使用中文回答,但代码可以是英文。 确保LaTeX语法正确,但无数学内容。 相关问题: 1. 如何处理嵌套JSON数据? 2. 使用Gson库遍历JSON的差异? 3. JSON遍历中的异常处理? 4. 如何将遍历结果存储到Java对象?</think>### Java遍历JSON数据的示例代码 在Java中处理JSON数据时,常用的库包括org.json、Gson或Jackson。本回答基于**org.json库**(轻量级且易用),逐步展示如何遍历JSON对象(JSONObject)和JSON数组JSONArray)。以下是完整示例,包括依赖添加、代码实现和解释。 #### 步骤1: 添加依赖 首先,在项目中引入org.json库。如果使用Maven,在`pom.xml`中添加: ```xml <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20231013</version> <!-- 使用最新版本 --> </dependency> ``` 如果手动添加,下载[json.jar](https://github.com/stleary/JSON-java)并导入项目。 #### 步骤2: 遍历JSON对象(JSONObject) JSON对象是键值对集合(如`{"name":"张三","age":25}`)。遍历时,使用`keys()`方法获取所有键,然后迭代取值。 ```java import org.json.JSONObject; public class JsonTraversal { public static void main(String[] args) { // 示例JSON字符串(一个JSON对象) String jsonString = "{\"name\":\"张三\", \"age\":25, \"hobby\":[\"编程\", \"读书\"]}"; // 解析字符串为JSONObject JSONObject jsonObject = new JSONObject(jsonString); // 遍历所有键值对 for (String key : jsonObject.keySet()) { Object value = jsonObject.get(key); System.out.println("键: " + key + ", 值: " + value); } } } ``` **输出示例:** ``` 键: name, 值: 张三 键: age, 值: 25 键: hobby, 值: ["编程","读书"] ``` **解释:** - `jsonObject.keySet()` 返回所有键的集合。 - `jsonObject.get(key)` 获取对应值,值可能是基本类型、字符串或嵌套JSON结构。 - 如果值嵌套JSON数组(如`hobby`),需进一步处理(见步骤3)。 #### 步骤3: 遍历JSON数组JSONArray) JSON数组是元素的有序集合(如`[{"title":"A"},{"title":"B"}]`)。遍历时,使用循环索引获取每个元素。 ```java import org.json.JSONArray; import org.json.JSONObject; public class JsonTraversal { public static void main(String[] args) { // 示例JSON字符串(一个JSON数组) String jsonArrayString = "[{\"title\":\"Java入门\", \"price\":50}, {\"title\":\"数据结构\", \"price\":60}]"; // 解析字符串为JSONArray JSONArray jsonArray = new JSONArray(jsonArrayString); // 遍历数组中的每个对象 for (int i = 0; i < jsonArray.length(); i++) { JSONObject item = jsonArray.getJSONObject(i); // 获取第i个元素(假设元素是JSONObject) String title = item.getString("title"); int price = item.getInt("price"); System.out.println("元素 " + i + ": 书名=" + title + ", 价格=" + price); } } } ``` **输出示例:** ``` 元素 0: 书名=Java入门, 价格=50 元素 1: 书名=数据结构, 价格=60 ``` **解释:** - `jsonArray.length()` 返回数组长度。 - `jsonArray.getJSONObject(i)` 获取索引i处的JSONObject(如果元素是对象)。 - 如果数组元素是基本类型(如字符串),使用`getString(i)`等。 #### 完整示例:处理嵌套JSON 实际JSON数据常含嵌套结构(如对象内嵌数组)。以下代码展示复杂场景的遍历: ```java import org.json.JSONArray; import org.json.JSONObject; public class NestedJsonTraversal { public static void main(String[] args) { // 示例JSON(对象内嵌数组) String jsonString = "{\"user\":\"李四\", \"scores\":[85, 90, 78]}"; JSONObject root = new JSONObject(jsonString); // 获取外层键值 System.out.println("用户: " + root.getString("user")); // 获取内嵌数组 JSONArray scores = root.getJSONArray("scores"); for (int i = 0; i < scores.length(); i++) { System.out.println("分数 " + i + ": " + scores.getInt(i)); } } } ``` **输出示例:** ``` 用户: 李四 分数 0: 85 分数 1: 90 分数 2: 78 ``` #### 注意事项 1. **异常处理**:使用`try-catch`捕获`JSONException`(如键不存在或类型不匹配): ```java try { JSONObject obj = new JSONObject(jsonString); } catch (JSONException e) { System.err.println("JSON解析错误: " + e.getMessage()); } ``` 2. **库选择**:org.json适合简单场景;复杂需求(如对象映射)推荐Gson或Jackson[^2]。 3. **性能**:遍历大型JSON时,避免频繁创建临时对象,使用流式API(如Jackson的`JsonParser`)优化内存[^1]。 ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值