Java中的JSON数据处理全攻略

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:JSON作为一种轻量级的数据交换格式,在Web服务和应用程序之间广泛使用。在Java中,处理JSON数据主要依赖于org.json等库。本文详细介绍了在Java中解析和操作JSON数据的步骤,包括导入库、创建JSON对象和数组、读取数据、创建和序列化JSON对象,以及错误处理等。掌握这些技能对于进行数据交换的Java开发者来说是至关重要的。
json

1. JSON数据格式介绍

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集。数据在键值对中表示,类似字典或哈希表。JSON常用于Web应用开发中,是前后端数据交换的常用格式。

JSON的特点

JSON具有以下特点:
- 文本格式 :易于阅读和编写。
- 语言无关 :几乎所有的编程语言都支持JSON数据格式,使其成为跨语言数据交换的理想选择。
- 结构化数据 :使用“键值对”存储数据,易于表达复杂的数据结构,支持数组和对象嵌套。
- 易于解析 :JSON直接对应于大多数编程语言中的对象或数据结构,因此转换成相应类型的数据非常方便。

JSON的格式

一个基本的JSON格式包括:
- 对象:用大括号 {} 包围键值对,例如 {"key": "value"}
- 数组:用方括号 [] 包围一组值,例如 ["value1", "value2", "value3"]
- 值:字符串、数字、布尔值、null、对象或数组。
- 键:字符串类型,总是用双引号 "" 包围。

在接下来的章节中,我们将深入探讨如何在Java中处理JSON数据,包括使用常见的JSON处理库、创建和操作JSONObject和JSONArray对象,以及异常处理等高级技巧。

2. Java中解析JSON的库使用

2.1 常见JSON处理库比较

JSON(JavaScript Object Notation)由于其轻量级和易于人的可读性,已经成为数据交换格式的标准之一。在Java开发中,处理JSON数据,开发者常常会选择使用第三方库来简化开发过程,提高开发效率。目前市面上有许多开源的JSON处理库,它们各有特点,适用于不同的应用场景。本节将对三个广泛使用的JSON处理库进行比较分析:Jackson、Gson和Fastjson。

2.1.1 Jackson库

核心特点:

  • Jackson是Java世界里最流行的JSON处理库之一。
  • 它提供了一流的性能,轻量级,以及高度可定制性。
  • Jackson库支持数据绑定,可以将JSON直接映射到Java对象,反之亦然。
  • 它支持注解,使得开发者能够更灵活地控制JSON的序列化和反序列化过程。

使用场景:

  • 当需要高度可定制化的数据处理时,Jackson是一个很好的选择。
  • 它很适合用于大型项目中,因其可扩展性好,并且社区支持强大。

2.1.2 Gson库

核心特点:

  • Gson是由Google提供的一个用于序列化和反序列化JSON数据的库。
  • Gson更轻量级,对Java 5及以上版本兼容性良好。
  • Gson直接使用Java的反射API来处理JSON数据,因此需要特别关注性能。
  • 它提供了简单的API,对于简单的JSON处理任务非常高效。

使用场景:

  • Gson适用于需要快速实现JSON处理的轻量级应用场景。
  • 当项目对性能要求不是极端严格时,Gson是个不错的选择。

2.1.3 Fastjson库

核心特点:

  • Fastjson是阿里巴巴开源的一个JSON处理库。
  • 它的主要特点是速度快,尤其在处理大量数据时。
  • Fastjson在API上提供了多种便利的方法,用起来非常简单。
  • 它也支持注解,并且能够直接序列化Java的集合类型。

使用场景:

  • 当处理的数据量大,且对性能有较高的要求时,Fastjson是一个优选。
  • 它还适用于开发人员希望快速实现JSON处理的场景。

结论:

根据不同的项目需求和场景,上述三种库各有其优势。Jackson提供了高度的可定制性,Gson使用起来简单快捷,而Fastjson在处理大量数据时展现出了卓越的性能。开发者应根据具体需求选择合适的库。

2.2 库的环境依赖与配置

在Java项目中使用JSON处理库之前,需要将其加入项目的依赖中,并且进行适当的配置。这一节将详细指导如何将这三种库加入到Maven项目中,并介绍库的兼容性和性能优化配置。

2.2.1 添加Maven依赖

对于Maven项目,添加依赖的步骤如下:

Jackson库依赖添加:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.3</version>
</dependency>

Gson库依赖添加:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.8</version>
</dependency>

Fastjson库依赖添加:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.70</version>
</dependency>

2.2.2 配置库的兼容性与性能优化

配置库的兼容性和性能优化是确保项目稳定和高效运行的重要环节。下面是一些通用的配置建议:

兼容性配置:

  • 确保所选JSON库的版本与Java版本兼容。
  • 如果使用了项目中其他依赖库依赖的JSON库版本不兼容,需要进行版本仲裁。

性能优化:

  • 根据项目需求调整JSON库的序列化和反序列化配置,如关闭额外的字段验证等。
  • 使用合适的序列化特性,比如Gson的 ExclusionStrategy ,或Jackson的 @JsonIgnore 注解。
  • 使用 ObjectMapper GsonBuilder 等来定制化库的行为,以适应项目的具体需求。

以上是对于Java中JSON库使用的概述。在实际操作中,开发者还需要根据具体的业务场景,选择合适的JSON处理库,添加正确的依赖,并进行相应的配置。在后续章节中,我们将会深入探讨如何使用这些库处理JSON数据,包括创建JSONObject和JSONArray对象,读取和写入JSON数据,以及异常处理等。

3. 导入org.json库步骤

3.1 org.json库概述

org.json是一个开源的Java库,用于处理JSON数据格式。它提供了简单而强大的API来创建、解析、操作和序列化JSON对象和数组。org.json库易于使用,并且不需要外部依赖,这使得它在小型项目和作为其他库依赖中非常受欢迎。除了核心的JSON对象和数组功能,org.json还提供了XML与JSON之间的转换支持,以及与Java原生类型之间的自动转换。

该库广泛支持JSON RFC 4627标准,同时允许开发者编写JSON数据,并将其转换成Java对象,或是将Java对象转换成JSON格式。org.json库适用于Android开发,因为它不需要大型的依赖项,并且在构建轻量级应用程序时非常高效。它也是在Web应用程序中处理JSON数据时一个理想的选择。

3.2 如何在项目中引入org.json库

3.2.1 Maven项目配置方法

对于使用Maven构建的项目,可以通过添加依赖到项目的 pom.xml 文件来引入org.json库。以下是如何添加org.json库的依赖项到Maven项目的步骤:

<dependencies>
    <!-- 引入org.json库 -->
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20210307</version>
    </dependency>
</dependencies>

在上述代码中, groupId 指定了组织ID, artifactId 指定了项目ID, version 指定了所使用库的具体版本。这个版本号是org.json库的最新版本,但是在实际使用时,建议检查并选择与您的项目兼容的版本。

3.2.2 非Maven项目的添加方式

对于没有使用Maven或Gradle这类构建工具的项目,您可以手动下载jar包,并将其添加到项目的类路径中。以下步骤详细说明了如何手动添加org.json库:

  1. 访问org.json的官方Maven仓库地址或搜索其在其他仓库的最新版本。
  2. 下载相应的jar文件(例如json-20210307.jar)以及任何必要的依赖项。
  3. 将下载的jar文件复制到您的项目构建路径中,确保它被包括在类路径中。在集成开发环境中,通常是通过项目的构建路径配置来完成此操作的。
  4. 如果有额外的依赖项,也需要确保这些jar文件同样被添加到类路径中。

3.3 检测org.json库版本与兼容性

3.3.1 查看当前使用的库版本

在Maven项目中,查看当前使用的org.json库版本非常简单,只需查看 pom.xml 文件即可。而在非Maven项目中,您可能需要运行一些代码来检测当前加载的jar文件版本。以下是一个简单的Java代码示例,用于检测和打印当前加载到类路径中的org.json库版本:

import org.json.JSONObject;

public class LibraryVersionCheck {
    public static void main(String[] args) {
        // 检查org.json库版本
        try {
            JSONObject jsonObject = new JSONObject();
            // 获取org.json库版本
            String version = jsonObject.getClass().getPackage().getImplementationVersion();
            System.out.println("Current org.json library version is: " + version);
        } catch (Exception e) {
            System.out.println("An error occurred while trying to fetch org.json library version.");
        }
    }
}

3.3.2 版本选择与库的更新策略

选择org.json库的版本时,需要考虑以下几点:

  • 稳定性 :选择一个稳定的版本,通常是一个长期支持(LTS)版本或广泛使用的版本。
  • 兼容性 :确保所选版本与您使用的Java版本兼容。
  • 新特性 :考虑是否有新的特性或改进对您的项目有帮助。
  • 安全性 :选择一个被广泛测试的版本,以减少潜在的安全风险。
  • 更新频率 :频繁更新的库可能会导致更多的维护工作,特别是在大型项目中。

在更新库的版本时,应采取谨慎的态度。更新前,建议备份代码,使用版本控制系统进行适当的分支管理,并在安全的测试环境中进行测试,确保新版本库不会引入任何回归错误或不兼容的变化。如果库的更新是必须的,进行增量更新,并逐个解决出现的问题将是一个较为稳妥的策略。

4. 创建JSONObject和JSONArray对象

在处理JSON数据时,创建和操作JSONObject和JSONArray对象是基础技能,它们分别用于表示JSON对象和JSON数组。本章深入探讨如何创建和操作这些对象,以及在不同场景下的应用。

4.1 JSONObject对象的创建与操作

4.1.1 JSONObject的基本构造方法

JSONObject是org.json库提供的类,用于表示JSON对象。JSON对象是一个无序的键值对集合。在Java中,我们可以通过多种方式创建一个JSONObject实例。

// 创建一个空的JSONObject对象
JSONObject jsonObject = new JSONObject();

// 通过Map创建JSONObject
Map<String, Object> map = new HashMap<>();
map.put("name", "John");
map.put("age", 30);
JSONObject jsonObjectFromMap = new JSONObject(map);

// 通过JSON字符串创建JSONObject
String jsonString = "{\"name\":\"John\",\"age\":30}";
JSONObject jsonObjectFromString = new JSONObject(jsonString);

4.1.2 JSONObject中数据的增删改查

创建JSONObject之后,我们经常需要对其进行增删改查操作。

// 增加数据
jsonObject.put("city", "New York");

// 删除数据
jsonObject.remove("city");

// 修改数据
jsonObject.put("age", 31);

// 查询数据
String name = jsonObject.getString("name");

4.1.3 JSONObject操作示例

在实际应用中,我们可能会遇到需要动态添加JSON对象的场景。下面是一个示例,演示了如何构建一个包含人员信息的JSONObject,并遍历其键值对。

// 创建并添加数据
JSONObject person = new JSONObject();
person.put("name", "Alice");
person.put("age", 25);
person.put("city", "San Francisco");

// 遍历JSONObject
Iterator<String> keys = person.keys();
while (keys.hasNext()) {
    String key = keys.next();
    Object value = person.get(key);
    System.out.println("Key: " + key + ", Value: " + value);
}

4.2 JSONArray对象的创建与操作

4.2.1 JSONArray的基本构造方法

JSONArray用于表示JSON数组,它是有序集合。我们可以使用多种方法来创建一个JSONArray实例。

// 创建一个空的JSONArray对象
JSONArray jsonArray = new JSONArray();

// 通过集合创建JSONArray
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
JSONArray jsonArrayFromList = new JSONArray(list);

// 通过JSON字符串创建JSONArray
String jsonArrayString = "[\"Apple\",\"Banana\"]";
JSONArray jsonArrayFromString = new JSONArray(jsonArrayString);

4.2.2 JSONArray中数据的增删改查

在使用JSONArray时,我们可能需要添加、删除或访问数组中的元素。

// 添加元素
jsonArray.put("Cherry");

// 删除元素
jsonArray.remove(0);

// 访问元素
String firstFruit = jsonArray.getString(0);

4.2.3 JSONArray操作示例

以下示例演示了如何创建一个包含水果名称的JSONArray,并展示了如何添加、获取和删除数组中的元素。

// 创建并添加数据
JSONArray fruits = new JSONArray();
fruits.put("Apple");
fruits.put("Banana");
fruits.put("Cherry");

// 获取并打印数组内容
for (int i = 0; i < fruits.length(); i++) {
    System.out.println("Array element at index " + i + ": " + fruits.getString(i));
}

// 删除元素并打印更新后的数组
fruits.remove(0);
System.out.println("Updated array: " + fruits.toString());

4.3 对象与数组的互转

4.3.1 JSONObject转换为JSONArray

在某些场景下,我们需要将JSONObject转换为JSONArray,例如当我们有一个对象列表,每个对象被表示为一个JSONObject时。

// 假设我们有一个JSONObject列表
List<JSONObject> objectList = new ArrayList<>();
JSONObject obj1 = new JSONObject();
obj1.put("id", 1);
JSONObject obj2 = new JSONObject();
obj2.put("id", 2);

objectList.add(obj1);
objectList.add(obj2);

// 将JSONObject列表转换为JSONArray
JSONArray jsonArray = new JSONArray(objectList);

4.3.2 JSONArray转换为JSONObject

有时候,我们可能需要将JSONArray中的每个元素转换成一个JSONObject,特别是在处理嵌套数据结构时。

// 假设我们有一个包含对象的JSONArray
JSONArray jsonArray = new JSONArray();
jsonArray.put(new JSONObject().put("id", 1));
jsonArray.put(new JSONObject().put("id", 2));

// 创建一个新的JSONObject数组
JSONObject[] objects = new JSONObject[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
    objects[i] = jsonArray.getJSONObject(i);
}

以上就是在创建JSONObject和JSONArray对象以及它们之间的转换方法。掌握这些操作对于处理JSON数据至关重要,并为之后章节中更复杂的JSON操作打下了坚实的基础。

5. 读取JSONObject数据方法

5.1 基本数据类型的读取

在使用JSON处理数据时,最基本的操作之一就是读取基本数据类型,包括字符串、数字、布尔值和null值。在org.json库中,这些操作通常非常直接和简单。

5.1.1 字符串、数字和布尔值的读取

在JSONObject对象中,我们可以使用以下方法来读取不同类型的数据:

JSONObject jsonObj = new JSONObject();
jsonObj.put("name", "John Doe");
jsonObj.put("age", 30);
jsonObj.put("married", true);

String name = jsonObj.getString("name"); // 获取字符串
int age = jsonObj.getInt("age"); // 获取数字
boolean isMarried = jsonObj.getBoolean("married"); // 获取布尔值

每个方法都有对应的 get 操作,用于获取不同数据类型的值。如果获取值的类型与实际存储在JSONObject中的数据类型不匹配,那么将会抛出 JSONException 异常。例如,尝试使用 getInt 方法获取一个布尔值将会失败。

5.1.2 null值的处理

处理null值时需要注意,JSONObject和JSONArray不会存储null值,而是会忽略它们。因此,在读取值时,应先检查值是否为null,以避免抛出异常。

Object value = jsonObj.get("unknownKey"); // 获取未知键对应的值
if (value == JSONObject.NULL) {
    System.out.println("键不存在或者值为null。");
} else if (value == null) {
    System.out.println("键不存在。");
} else {
    System.out.println("获取到的值为:" + value);
}

在这个例子中,使用了 JSONObject.NULL 来判断值是否为null。这种方式可以区分键不存在的情况和值为null的情况。

5.2 复杂数据结构的读取

在JSONObject中嵌套JSONObject或JSONArray是常见的操作,这为我们提供了更复杂的数据结构和层次化的数据组织能力。

5.2.1 JSONObject中嵌套JSONObject

嵌套的JSONObject可以通过连续调用 getJSONObject 方法来访问,如下所示:

JSONObject nestedJson = new JSONObject();
JSONObject innerJson = new JSONObject();
innerJson.put("gender", "Male");

nestedJson.put("personalDetails", innerJson);

JSONObject personalDetails = nestedJson.getJSONObject("personalDetails");
String gender = personalDetails.getString("gender");

5.2.2 JSONObject中嵌套JSONArray

类似地,嵌套的JSONArray可以通过连续调用 getJSONArray 方法来访问。

JSONObject nestedJson = new JSONObject();
JSONArray hobbiesArray = new JSONArray();
hobbiesArray.put("reading");
hobbiesArray.put("traveling");

nestedJson.put("hobbies", hobbiesArray);

JSONArray hobbies = nestedJson.getJSONArray("hobbies");
String firstHobby = hobbies.getString(0); // "reading"

代码逻辑分析

上述代码块展示了如何读取嵌套的JSONObject和JSONArray。每一个 getJSONObject getJSONArray 调用返回的是一个JSONObject或者JSONArray的实例,允许我们进一步操作嵌套的JSON对象。

5.3 键集合和值集合的获取

JSONObject提供了获取键集合和值集合的方法,可以用来遍历JSONObject中的内容。

5.3.1 键集合的遍历方法
Iterator<String> keys = jsonObj.keys();
while (keys.hasNext()) {
    String key = keys.next();
    Object value = jsonObj.get(key);
    System.out.println("Key: " + key + ", Value: " + value);
}
5.3.2 值集合的遍历方法
for (Object value : jsonObj.values()) {
    System.out.println("Value: " + value);
}

通过上述方法,我们可以遍历JSONObject中的所有键和值。这对于处理和分析JSON数据结构非常有用,尤其是当JSON数据结构复杂且需要处理大量数据时。

在这一章节中,我们探讨了如何在JSONObject中读取不同类型的数据,包括基本数据类型和嵌套的复杂数据结构。我们还了解了如何获取键集合和值集合来遍历JSONObject。这些操作为理解和处理JSONObject提供了坚实的基础。

6. 处理JSONArray对象循环

处理JSONArray对象时,我们经常需要对数组内的每个元素执行一系列操作。这些操作可能包括简单的遍历,或者是对复杂嵌套结构的深入处理。让我们深入探讨如何高效地处理JSONArray对象中的循环。

6.1 循环遍历JSONArray

遍历JSONArray通常是为了提取信息或者对数据进行进一步的处理。我们可以使用不同的方法来实现这一点。

6.1.1 使用索引进行遍历

最直接的遍历方法是使用索引来访问每个元素。对于大多数数组操作而言,这是一种非常基本的手段。

JSONArray jsonArray = new JSONArray();
// 假设jsonArray已经被添加了数据
for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject jsonObject = jsonArray.getJSONObject(i);
    // 在这里可以对jsonObject做进一步操作
}

6.1.2 使用迭代器进行遍历

虽然使用索引遍历简单直观,但在处理复杂数据结构时,使用迭代器进行遍历可能更加方便。

Iterator<JSONObject> it = jsonArray.iterator();
while (it.hasNext()) {
    JSONObject jsonObject = it.next();
    // 在这里可以对jsonObject做进一步操作
}

6.2 特殊数据结构的处理

在处理JSONArray时,我们经常遇到嵌套的JSONObject和JSONArray结构。处理这些结构需要特别注意。

6.2.1 嵌套JSONObject和JSONArray的遍历

嵌套结构要求我们在遍历时能够正确处理不同层级的对象。例如,我们可以编写一个递归函数来处理任意深度的嵌套:

void traverseArray(JSONArray array) {
    for (int i = 0; i < array.length(); i++) {
        Object element = array.get(i);
        if (element instanceof JSONObject) {
            // 如果是JSONObject,进行相应处理
            traverseObject((JSONObject)element);
        } else if (element instanceof JSONArray) {
            // 如果是JSONArray,递归遍历
            traverseArray((JSONArray)element);
        }
    }
}

void traverseObject(JSONObject obj) {
    Iterator<String> keys = obj.keys();
    while (keys.hasNext()) {
        String key = keys.next();
        Object value = obj.get(key);
        if (value instanceof JSONObject) {
            // 如果是JSONObject,进行相应处理
            traverseObject((JSONObject)value);
        } else if (value instanceof JSONArray) {
            // 如果是JSONArray,递归遍历
            traverseArray((JSONArray)value);
        }
    }
}

6.2.2 条件筛选与数据提取

在实际应用场景中,我们常常需要根据特定条件筛选数据。这需要我们在遍历时加入逻辑判断。

JSONArray result = new JSONArray();
for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject jsonObject = jsonArray.getJSONObject(i);
    if ( jsonObject.has("someKey") && jsonObject.getString("someKey").equals("someValue") ) {
        result.put(jsonObject);
    }
}

6.3 循环中异常的处理

在处理JSONArray对象的循环时,可能会遇到各种异常情况。正确地处理这些异常对于保证代码的健壮性至关重要。

6.3.1 异常的类型与处理方法

处理JSONArray时,我们可能会遇到如 JSONException 等异常。了解不同异常的类型,并采取合适的处理方式,是编写可靠代码的关键。

try {
    // 可能抛出JSONException的代码
} catch (JSONException e) {
    // 处理异常,记录日志等
}

6.3.2 增强代码健壮性的实践技巧

为了增强代码的健壮性,我们应当尽可能减少异常的发生,例如通过预检JSON数据的有效性。

// 检查JSONArray是否包含预期结构
if (jsonArray != null && jsonArray.length() > 0) {
    // 在处理前进行必要的验证
    for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject jsonObject = jsonArray.getJSONObject(i);
        // 检查 jsonObject 是否含有预期键等
    }
}

在本章节中,我们学习了如何在循环中处理JSONArray对象,包括基本的遍历方法,以及嵌套结构的处理和异常处理的策略。这些技巧和方法将帮助您更加高效地管理和操作JSON数据。在下一章节中,我们将进一步探讨如何创建和序列化JSON数据,并了解JSON在实际开发中的高级应用。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:JSON作为一种轻量级的数据交换格式,在Web服务和应用程序之间广泛使用。在Java中,处理JSON数据主要依赖于org.json等库。本文详细介绍了在Java中解析和操作JSON数据的步骤,包括导入库、创建JSON对象和数组、读取数据、创建和序列化JSON对象,以及错误处理等。掌握这些技能对于进行数据交换的Java开发者来说是至关重要的。


本文还有配套的精品资源,点击获取
menu-r.4af5f7ec.gif

处理嵌套json格式的数据。。。 public static void main(String[] args) { // 官方API http://www.json.org/java/ /* 购物车中信息 goods_cart={cart_1325036696007:{goods_id:"100015",goods_name:"澳大利亚进口绵羊",goods_imgsrc:"http://192.168.1.180:7001//gwadmin/uploadimg/spxc/2011/12/9/100016_00948703_68.jpg",specs:"b555bfj05d7dcg307h91323398584156",specsstr:"颜色:黑色 尺寸:L",price:4765,stock:15,count:6},cart_1325036702105:{goods_id:"100015",goods_name:"澳大利亚进口绵羊",goods_imgsrc:"http://192.168.1.180:7001//gwadmin/uploadimg/spxc/2011/12/9/100016_00948703_68.jpg",specs:"787a9f5he93chcifh951323398314484",specsstr:"颜色:黑色 尺寸:XL",price:4700.15,stock:12,count:1},cart_1325136643984:{goods_id:"100015",goods_name:"澳大利亚进口绵羊",goods_imgsrc:"http://192.168.1.180:7001//gwadmin/uploadimg/spxc/2011/12/9/100015_00399656_68.jpg",specs:"8466347bi6eia43hd6j1323398639859",specsstr:"颜色:灰色 尺寸:XL",price:4600,stock:3,count:1}}; * **/ try{ String s0 = "{cart_1325036696007:{goods_id:"100015",goods_name:"澳大利亚进口绵羊",goods_imgsrc:"http://192.168.1.180:7001//gwadmin/uploadimg/spxc/2011/12/9/100016_00948703_68.jpg",specs:"b555bfj05d7dcg307h91323398584156",specsstr:"颜色:黑色 尺寸:L",price:4765,stock:15,count:6},cart_1325036702105:{goods_id:"100015",goods_name:"澳大利亚进口绵羊",goods_imgsrc:"http://192.168.1.180:7001//gwadmin/uploadimg/spxc/2011/12/9/100016_00948703_68.jpg",specs:"787a9f5he93chcifh951323398314484",specsstr:"颜色:黑色 尺寸:XL",price:4700.15,stock:12,count:1},cart_1325136643984:{goods_id:"100015",goods_name:"澳大利亚进口绵羊",goods_imgsrc:"http://192.168.1.180:7001//gwadmin/uploadimg/spxc/2011/12/9/100015_00399656_68.jpg",specs:"8466347bi6eia43hd6j1323398639859",specsstr:"颜色:灰色 尺寸:XL",price:4600,stock:3,count:1}};"; String s= java.net.URLDecoder.decode(s0, "utf-8"); System.out.println(s); JSONObject o = new JSONObject(s); System.out.println(o.get("cart_1325036696007")); //根据属性,获取值 System.out.println(o.toString()); //得到字符串 System.out.println(o.names().get(2)); //获取对象中第三组属性名 System.out.println(o.names().length()); //获取对象中属性个数 //System.out.println(o.names().getJSONArray(1)); //获取对象中属性个数 //names(jsonObjectName) 私有方法 获取该对象的所有属性名,返回成JSONArray。 //JSONObject.getNames(jsonObjectName) 静态方法 获取对象的所有属性名,返回成数组。 System.out.println(JSONObject.getNames(o.getJSONObject("cart_1325036696007"))[1]); System.out.println(o.getJSONObject("cart_1325036696007").names().get(1)); System.out.println(o.length()); //共有几组对象 System.out.println(o.has("cart_1325036696007")); //有无该该值 /* 遍历json中的每一组元素*/ String name = null; JSONObject t_o = null; for(int i=0; i<o.length(); i++){ name = JSONObject.getNames(o)[i]; System.out.println("商品项ID:"+name); t_o = o.getJSONObject(name); for(int j=0; j< t_o.length(); j++){ name = JSONObject.getNames(t_o)[j]; System.out.print(name+":"+t_o.get(name)+" "); } System.out.println(); } }catch(Exception e){ e.printStackTrace(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值