怎么判断JSON格式为空:实用技巧与代码示例
在开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于前后端数据传输、配置文件存储等场景,处理JSON数据时,判断其“是否为空”是一个常见需求,但“空”的定义可能因场景而异——可能是对象无属性、数组无元素,或是字符串为空/无效,本文将详细解析不同场景下判断JSON格式为空的方法,并提供多种编程语言的代码示例。
明确“JSON为空”的定义
在开始判断前,需先明确“JSON为空”的具体含义,避免逻辑偏差,常见的“空”场景包括:
- 空对象(Object):无任何键值对,如 。
- 空数组(Array):无任何元素,如
[]。 - 空JSON字符串:字符串本身为空()、仅含空白字符(),或字符串内容不是有效的JSON(如
"null"、"undefined")。 - JSON值为
null:显式声明的null值,如{"data": null}中的data字段。
根据业务需求,可能需要判断上述一种或多种情况,需结合具体场景选择合适的判断逻辑。
判断JSON为空的通用方法
解析JSON后判断结构(核心方法)
无论编程语言如何,判断JSON是否为空的核心步骤是:先解析JSON字符串为原生数据结构(如对象、数组),再根据数据类型判断其是否为空。
(1)空对象的判断
空对象()的特点是:解析后为Object类型,且length(或键的数量)为0。
- JavaScript/TypeScript:
Object.keys(obj).length === 0 - Python:
not obj(空字典返回False) - Java:
obj.isEmpty()(需确保对象是Map或自定义空对象)
(2)空数组的判断
空数组([])的特点是:解析后为Array类型,且length为0。
- JavaScript/TypeScript:
Array.isArray(arr) && arr.length === 0 - Python:
isinstance(arr, list) and len(arr) == 0 - Java:
arr != null && arr.length == 0
(3)空JSON字符串的判断
空JSON字符串需分两层判断:
- 字符串本身为空:直接检查字符串长度(如
str.trim() === "")。 - 无效或为空值:尝试解析JSON,若解析失败(抛出异常)或解析结果为
null//[],则视为空。
特殊场景:null值的判断
JSON中显式的null值(如{"key": null})需要单独处理:
- 解析后直接判断值是否为
null(如obj.key === null)。 - 注意:
null与undefined不同,JSON标准中不支持undefined,但某些解析器可能将其转换为null。
多语言代码示例
JavaScript/TypeScript
场景1:判断JSON对象是否为空
function isEmptyJsonObject(obj) {
// 确保是对象且不是null(JSON.parse不会返回undefined)
return typeof obj === 'object' && obj !== null && !Array.isArray(obj) && Object.keys(obj).length === 0;
}
// 测试
const jsonStr = '{}';
const obj = JSON.parse(jsonStr);
console.log(isEmptyJsonObject(obj)); // true
场景2:判断JSON数组是否为空
function isEmptyJsonArray(arr) {
return Array.isArray(arr) && arr.length === 0;
}
// 测试
const arrStr = '[]';
const arr = JSON.parse(arrStr);
console.log(isEmptyJsonArray(arr)); // true
场景3:判断JSON字符串是否为空(含无效情况)
function isEmptyJsonString(str) {
if (typeof str !== 'string') return false; // 非字符串直接返回false
const trimmedStr = str.trim();
if (!trimmedStr) return true; // 空字符串或仅空白字符
try {
const parsed = JSON.parse(trimmedStr);
// 解析后检查是否为空对象/数组/null
return parsed === null ||
(typeof parsed === 'object' && !Array.isArray(parsed) && Object.keys(parsed).length === 0) ||
(Array.isArray(parsed) && parsed.length === 0);
} catch (e) {
return true; // 解析失败,视为无效JSON(视为空)
}
}
// 测试
console.log(isEmptyJsonString('')); // true
console.log(isEmptyJsonString(' ')); // true
console.log(isEmptyJsonString('null')); // true
console.log(isEmptyJsonString('{}')); // true
console.log(isEmptyJsonString('[]')); // true
console.log(isEmptyJsonString('{"a": 1}')); // false
console.log(isEmptyJsonString('invalid json')); // true
Python
场景1:判断JSON对象(字典)是否为空
import json
def is_empty_json_dict(obj):
return isinstance(obj, dict) and not obj # 空字典返回False
# 测试
json_str = '{}'
obj = json.loads(json_str)
print(is_empty_json_dict(obj)) # True
场景2:判断JSON数组(列表)是否为空
def is_empty_json_list(arr):
return isinstance(arr, list) and len(arr) == 0
# 测试
arr_str = '[]'
arr = json.loads(arr_str)
print(is_empty_json_list(arr)) # True
场景3:判断JSON字符串是否为空
def is_empty_json_string(str_val):
if not isinstance(str_val, str):
return False
trimmed_str = str_val.strip()
if not trimmed_str:
return True # 空字符串或仅空白字符
try:
parsed = json.loads(trimmed_str)
return parsed is None or \
(isinstance(parsed, dict) and not parsed) or \
(isinstance(parsed, list) and len(parsed) == 0)
except json.JSONDecodeError:
return True # 解析失败,视为无效JSON
# 测试
print(is_empty_json_string('')) # True
print(is_empty_json_string(' ')) # True
print(is_empty_json_string('null')) # True
print(is_empty_json_string('{}')) # True
print(is_empty_json_string('[]')) # True
print(is_empty_json_string('{"a": 1}')) # False
print(is_empty_json_string('invalid json')) # True
Java
场景1:判断JSON对象(JSONObject)是否为空
import org.json.JSONObject;
public boolean isEmptyJsonObject(String jsonStr) {
try {
JSONObject obj = new JSONObject(jsonStr);
return obj.length() == 0; // JSONObject的length()返回键的数量
} catch (Exception e) {
return true; // 解析失败,视为无效JSON
}
}
// 测试
String jsonStr = "{}";
System.out.println(isEmptyJsonObject(jsonStr)); // true
场景2:判断JSON数组(JSONArray)是否为空
import org.json.JSONArray;
public boolean isEmptyJsonArray(String jsonStr) {
try {
JSONArray arr = new JSONArray(jsonStr);
return arr.length() == 0;
} catch (Exception e) {
return true;
}
}
// 测试
String arrStr = "[]";
System.out.println(isEmptyJsonArray(arrStr)); // true
场景3:判断JSON字符串是否为空
import org.json.JSONObject;
import org.json.JSONArray;
public boolean isEmptyJsonString(String str) {
if (str == null || str.trim().isEmpty()) {
return true; // 空字符串或仅空白字符
}
try {
// 尝试解析为JSONObject
JSONObject obj = new JSONObject(str);
return obj.length() == 0;
} catch (Exception e1) {
try {
// 尝试解析为JSONArray
JSONArray arr = new JSONArray(str);
return arr.length() == 0;
} catch (Exception e2) {
try {
// 尝试解析为null
Object parsed = new JSONObject("value").opt("value");
return str.equalsIgnoreCase("null");
} catch (Exception e3) {
return true; // 解析失败,视为无效JSON
}
}
}
}
// 测试
System.out.println(isEmptyJsonString("")); // true
System.out.println(isEmptyJsonString(" ")); // true抖音足球直播
抖音足球直播
企鹅直播
企鹅直播
足球直播
爱奇艺直播
爱奇艺足球直播
足球直播
足球直播
iqiyi直播
足球直播
足球直播
QQ足球直播
QQ足球直播
足球直播
足球直播
QQ足球直播
QQ足球直播
足球直播
足球直播
快连
快连
快连
快连下载
快连
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
新浪足球直播
新浪足球直播
足球直播
足球直播
有道翻译
有道翻译
有道翻译
有道翻译
wps
wps
wps
wps
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
新浪足球直播
新浪足球直播
足球直播
足球直播



还没有评论,来说两句吧...