
本文旨在详细阐述如何在java和android开发环境中解析json数组(jsonarray),遍历其中的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类。
首先,你需要将原始的JSON字符串转换为JSONArray对象。这通常在从网络API获取响应后进行。
立即学习“Java免费学习笔记(深入)”;
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并按键值筛选数据的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号