You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中通过URL解析文件中的多个JSON对象

嘿,我来帮你搞定这个问题!处理包含多个JSON对象的文本文件并把数据存入数据库其实没那么复杂,我给你梳理个清晰的实操流程,用Python来举例,你可以直接参考着来:

步骤1:读取并解析JSON数据

首先得明确你的文本文件里JSON的存储格式——是每行一个独立JSON对象,还是多个JSON对象无分隔/用逗号分隔但没数组包裹?我给你两种场景的处理方式:

场景A:每行一个JSON对象

这种格式很常见(比如日志类文件),我们可以逐行读取解析:

import json

json_data_list = []
# 替换成你的文件路径
with open('your_json_file.txt', 'r', encoding='utf-8') as f:
    for line in f:
        # 跳过空行避免解析报错
        if line.strip():
            try:
                json_obj = json.loads(line)
                json_data_list.append(json_obj)
            except json.JSONDecodeError as e:
                print(f"解析该行出错: {e},内容为: {line}")

场景B:多个JSON对象无分隔/逗号分隔无数组包裹

如果文件是{"a":1}{"b":2}或者{"a":1},{"b":2}这种格式,推荐用ijson做流式解析,避免大文件占用过多内存:

import ijson

json_data_list = []
with open('your_json_file.txt', 'r', encoding='utf-8') as f:
    # 流式读取每个独立的JSON对象
    for obj in ijson.items(f, ''):
        json_data_list.append(obj)

注:如果没装ijson,先运行pip install ijson安装依赖

步骤2:提取目标字段

现在所有JSON对象都转成Python字典了,你可以按需提取字段,比如从你提供的示例里取出address、city、country等信息:

extracted_data = []
for obj in json_data_list:
    # 用get方法避免字段不存在时抛出KeyError
    item = {
        'address': obj.get('address'),
        'city': obj.get('city'),
        'country': obj.get('country'),
        # 转成数值类型,方便后续数据库的数值查询
        'latitude': float(obj.get('latitude', 0.0)),
        'longitude': float(obj.get('longitude', 0.0)),
        'name': obj.get('name'),
        'date_added': obj.get('dateAdded')
    }
    extracted_data.append(item)
步骤3:存入数据库

这里用SQLite举例(无需额外安装数据库服务,适合快速测试),如果用MySQL、PostgreSQL,只需要替换对应的连接库和SQL语句即可:

import sqlite3

# 连接数据库(不存在则自动创建)
conn = sqlite3.connect('businesses.db')
cursor = conn.cursor()

# 创建存储表(如果不存在)
cursor.execute('''
CREATE TABLE IF NOT EXISTS businesses (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    address TEXT,
    city TEXT,
    country TEXT,
    latitude REAL,
    longitude REAL,
    name TEXT,
    date_added TEXT
)
''')

# 批量插入数据,比循环单条插入效率高很多
cursor.executemany('''
INSERT INTO businesses (address, city, country, latitude, longitude, name, date_added)
VALUES (:address, :city, :country, :latitude, :longitude, :name, :date_added)
''', extracted_data)

# 提交更改并关闭连接
conn.commit()
conn.close()
一些实用提示
  • 数据类型校验:比如经纬度转成数值类型,避免存成字符串影响后续的范围查询等操作
  • 异常捕获:在解析JSON和插入数据库时都要加异常处理,防止一条坏数据导致整个程序崩溃
  • 大文件优化:如果文件特别大,不要一次性加载所有数据到内存,用流式解析或者分块处理的方式
  • 字段容错:用get方法提取字段时可以设置默认值,避免因缺失字段报错

内容的提问来源于stack exchange,提问作者Geo Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:57:48