当前位置: 首页 > article >正文

如何处理京东商品详情接口返回的JSON数据中的缺失值?

1.在 Python 中处理缺失值

  • 使用if - else语句进行检查和处理
    • 假设通过requests库获取了接口返回的 JSON 数据,并使用json模块进行解析,存储在data变量中。
import json
import requests

url = "YOUR_API_URL"
response = requests.get(url)
data = json.loads(response.text)

# 处理商品名称可能缺失的情况
if 'product_name' in data:
    product_name = data['product_name']
else:
    product_name = "未获取到商品名称"
print(product_name)

# 处理价格可能缺失的情况
if 'price' in data:
    price = data['price']
else:
    price = 0.0
print(price)

 使用get方法(字典方法)获取值并设置默认值

  • get方法在字典(JSON 数据解析后通常为字典类型)中查找键对应的值,如果键不存在,则返回默认值。
import json
import requests

url = "YOUR_API_URL"
response = requests.get(url)
data = json.loads(response.text)

product_name = data.get('product_name', "未获取到商品名称")
print(product_name)

price = data.get('price', 0.0)
print(price)

 结合pandas库处理表格化数据中的缺失值(如果 JSON 数据中有表格部分)

  • 假设 JSON 数据中有一个specifications字段,其值是一个包含商品规格的列表,每个规格是一个字典。
  • import json
    import requests
    import pandas as pd
    
    url = "YOUR_API_URL"
    response = requests.get(url)
    data = json.loads(response.text)
    
    if'specifications' in data:
        spec_df = pd.DataFrame(data['specifications'])
        spec_df.fillna("未获取到该规格信息", inplace=True)
        print(spec_df)

    2.在 Java 中处理缺失值

  • 使用has方法和get方法(org.json库)进行检查和处理
    • 假设已经通过OkHttp或其他方式获取了接口返回的 JSON 数据,存储在responseString变量中,并使用org.json库进行解析。
import org.json.JSONObject;
import org.json.JSONArray;

// 假设responseString是接口返回的JSON数据
JSONObject jsonObject = new JSONObject(responseString);

// 处理商品名称可能缺失的情况
String product_name;
if (jsonObject.has("product_name")) {
    product_name = jsonObject.getString("product_name");
} else {
    product_name = "未获取到商品名称";
}
System.out.println(product_name);

// 处理价格可能缺失的情况
double price;
if (jsonObject.has("price")) {
    price = jsonObject.getDouble("price");
} else {
    price = 0.0;
}
System.out.println(price);

 使用Optional类型(Java 8+)和Gson库进行更灵活的处理(假设使用Gson解析)

  • 首先需要在项目中添加Gson依赖。如果是 Maven 项目,在pom.xml文件中添加相应依赖。
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import java.util.Optional;

// 假设responseString是接口返回的JSON数据
Gson gson = new Gson();
JsonObject jsonObject = gson.fromJson(responseString, JsonObject.class);

Optional<String> product_name_opt = Optional.ofNullable(jsonObject.get("product_name")).map(elem -> elem.getAsString());
String product_name = product_name_opt.orElse("未获取到商品名称");
System.out.println(product_name);

Optional<Double> price_opt = Optional.ofNullable(jsonObject.get("price")).map(elem -> elem.getAsDouble());
double price = price_opt.orElse(0.0);
System.out.println(price);

 3.在 JavaScript 中处理缺失值(在 Node.js 或浏览器环境中)

  • 使用if - else语句和&&操作符进行检查和处理
    • 假设已经通过fetchaxios等方式获取了接口返回的 JSON 数据,存储在responseData变量中。
// 假设responseData是接口返回的JSON数据
let data = JSON.parse(responseData);

// 处理商品名称可能缺失的情况
let product_name;
if (data.product_name) {
    product_name = data.product_name;
} else {
    product_name = "未获取到商品名称";
}
console.log(product_name);

// 处理价格可能缺失的情况
let price;
if (data.price) {
    price = data.price;
} else {
    price = 0;
}
console.println(price);

 使用?.(可选链操作符)和??(空值合并操作符)进行简洁处理(在支持的环境中)

  • 可选链操作符?.可以在访问对象属性时,如果对象为nullundefined,则停止访问并返回undefined。空值合并操作符??可以在左侧操作数为nullundefined时返回右侧操作数。
// 假设responseData是接口返回的JSON数据
let data = JSON.parse(responseData);

let product_name = data.product_name?? "未获取到商品名称";
console.log(product_name);

let price = data.price?? 0;
console.log(price);

 4.在 C# 中处理缺失值(使用Newtonsoft.Json库)

  • 使用ContainsKey方法和??(空值合并运算符)进行检查和处理
    • 假设已经通过HttpClient或其他方式获取了接口返回的 JSON 数据,存储在responseContent变量中。
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

// 假设responseContent是接口返回的JSON数据
JObject jsonObject = JObject.Parse(responseContent);

// 处理商品名称可能缺失的情况
string product_name = jsonObject.ContainsKey("product_name")? jsonObject["product_name"].ToString() : "未获取到商品名称";
Console.WriteLine(product_name);

// 处理价格可能缺失的情况
decimal price = jsonObject.ContainsKey("price")? decimal.Parse(jsonObject["price"].ToString()) : 0;
Console.WriteLine(price);

http://www.kler.cn/a/472286.html

相关文章:

  • 案例解读 | 香港某多元化综合金融企业基础监控+网管平台建设实践
  • 【算法】字符串算法技巧系列
  • 用OpenCV实现UVC视频分屏
  • 道品科技智慧农业与云平台:未来农业的变革之路
  • MongoTemplate 性能优化指南
  • 洛谷P1617————数字转英文
  • 25/1/6 算法笔记<强化学习> 初玩V-REP
  • GPU算力平台的应用之任意门:任意穿搭匹配模型的应用教程
  • 晨辉面试抽签和评分管理系统之三:考生批量抽签
  • Java SE 与 Java EE 简介
  • vue3 react使用高德离线地图
  • linux MySQL 实时性能监控工具
  • TCP实验报告
  • 【Uniapp-Vue3】scroll-view可滚动视图区域组件
  • 使用U盘制作CentOS 7.9启动盘的详细步骤
  • Java大厂面试题之10种分布式ID的生成方案
  • C++编程进阶:标准库中的迭代器库解析
  • 【微服务】7、分布式事务
  • 第一个Spring MVC 6入门示例
  • 阿里云DDoS防护:如何更换IP地址,保护您的云服务器
  • 复习打卡大数据篇——HIVE 02
  • Wi-Fi Direct (P2P)原理及功能介绍
  • 运行.Net 7 Zr.Admin项目(后端)
  • Unity学习之UGUI(三)
  • Android图形系统中的PDF渲染:架构、JNI、系统定制与实际应用
  • 微服务-网关、配置热更新、动态路由