登录
首页 >  文章 >  java教程

Java/Android快速解析JSONArray数据

时间:2025-12-25 23:09:45 207浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《Java/Android高效解析JSONArray并筛选数据》,很明显是关于文章的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

在Java/Android中高效解析JSONArray并按键值筛选数据

本文旨在详细阐述如何在Java和Android开发环境中解析JSON数组(JSONArray),遍历其中的JSON对象,并根据特定键值(如电子邮件地址)进行数据筛选,最终提取所需字段(如经纬度)进行进一步处理。教程将提供清晰的代码示例,并涵盖错误处理及注意事项,以确保数据解析的健壮性和效率。

JSON数组解析基础

在Java和Android应用开发中,处理来自网络请求或本地存储的JSON数据是常见的任务。当数据以JSON数组的形式组织时,我们需要遍历数组中的每个JSON对象,并从中提取所需的信息。

一个典型的JSON数组结构如下所示,它包含多个对象,每个对象都有一组键值对:

[
    {
        "num": "34304",
        "email": "<a class=\"__cf_email__\" data-cfemail=\"2f4e4e4e4e6f424e4643014e4b4b5d4a5c5c\" href=\"/cdn-cgi/l/email-protection\">[email protected]</a>",
        "lati": "8888888",
        "longt": "88888888",
        "time": "2022-12-08 21:15:39"
    },
    {
        "num": "34303",
        "email": "<a class=\"__cf_email__\" data-cfemail=\"2c4d4d4d4d6c414d4540024d48485e495f5f\" href=\"/cdn-cgi/l/email-protection\">[email protected]</a>",
        "lati": "8888",
        "longt": "88888",
        "time": "8888888"
    }
    // ... 更多对象
]

要解析这样的数据,我们通常使用Android SDK自带的org.json包中的JSONArray和JSONObject类。

初始化JSONArray

首先,你需要将原始的JSON字符串转换为JSONArray对象。这通常在从网络API获取响应后进行。

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;

// 假设有一个LatLng类,或者使用Android提供的com.google.android.gms.maps.model.LatLng
// 如果在Android项目中使用Google Maps SDK,可以直接使用其LatLng类。
// 这里为了示例独立性,提供一个简化的自定义LatLng类。
class LatLng {
    public double latitude;
    public double longitude;

    public LatLng(double latitude, double longitude) {
        this.latitude = latitude;
        this.longitude = longitude;
    }

    @Override
    public String toString() {
        return "LatLng{" +
               "latitude=" + latitude +
               ", longitude=" + longitude +
               '}';
    }
}

public class JsonDataProcessor {

    /**
     * 解析JSON字符串,根据目标邮箱筛选数据,并提取经纬度。
     *
     * @param jsonString 包含JSON数组的字符串。
     * @param targetEmail 用于筛选的电子邮件地址(纯文本格式)。
     * @return 匹配目标邮箱的所有经纬度列表。
     */
    public List<LatLng> parseAndFilterJson(String jsonString, String targetEmail) {
        List<LatLng> filteredLatLngList = new ArrayList<>();

        try {
            // 1. 将JSON字符串转换为JSONArray对象
            JSONArray jsonArray = new JSONArray(jsonString);

            // 2. 遍历JSONArray中的每个JSONObject
            for (int i = 0; i < jsonArray.length(); i++) {
                // 使用optJSONObject更安全,避免在索引处不是JSONObject或越界时抛出异常
                JSONObject jsonObject = jsonArray.optJSONObject(i); 

                if (jsonObject != null) {
                    // 3. 从JSONObject中提取所需字段
                    // 使用optString提供默认值,避免键不存在时抛出JSONException
                    String emailRaw = jsonObject.optString("email", ""); 
                    String latiStr = jsonObject.optString("lati", "0.0");
                    String longtStr = jsonObject.optString("longt", "0.0");

                    // 4. 应用筛选逻辑
                    // 注意:原始JSON中的email字段是HTML格式,实际应用中需要额外解析或清洗
                    // 这里假设targetEmail是纯文本,且email字段经过清洗后可直接比较
                    String cleanEmail = extractEmailFromHtml(emailRaw); // 假设存在一个清洗函数

                    if (cleanEmail.equals(targetEmail)) {
                        try {
                            double latitude = Double.parseDouble(latiStr);
                            double longitude = Double.parseDouble(longtStr);
                            filteredLatLngList.add(new LatLng(latitude, longitude));

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《Java/Android快速解析JSONArray数据》文章吧,也可关注golang学习网公众号了解相关技术文章。

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>