讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在Python中用TensorFlow 2.x解析复杂JSON数据

梦伟小哥_3440

梦伟小哥_3440

发布时间:2026-11-08 06:24:20

|

905人浏览过

|

来源于php中文网

原创

TensorFlow 2.x 无内置 JSON 解析算子,需用 json.loads() 配合 tf.py_function 安全接入 pipeline,并显式声明输出类型与形状;复杂嵌套应提前扁平化,性能敏感场景宜预处理为 TFRecord 或 CSV。

如何在python中用tensorflow 2.x解析复杂json数据

TensorFlow 2.x 本身不提供 JSON 解析能力

直接用 tf.io.parse_json 或类似函数会报 AttributeError: module 'tensorflow.io' has no attribute 'parse_json' —— 因为 TensorFlow(包括 2.x)**没有内置 JSON 解析算子**。JSON 是通用文本格式,解析逻辑属于预处理层,应交给 Python 标准库或第三方库完成,再把结果转为 tf.Tensor 或 tf.data.Dataset。

常见错误是试图在 tf.data.Dataset.map() 中直接调用 json.loads(),这会导致“在图模式下使用不可追踪的 Python 函数”错误(TypeError: Cannot convert Python object to Tensor),尤其在启用 @tf.function 或使用 tf.data pipeline 时。

用 json.loads() + tf.py_function 安全接入 pipeline

这是最稳妥的实操路径:先用标准库解析 JSON 字符串,再用 tf.py_function 将结果包装进 TensorFlow 图中。注意返回值必须明确指定 dtype 和 shape,否则后续操作会失败。

假设你有一批 JSON 字符串(如日志行、API 响应体),每条含嵌套字段 {"user": {"id": 123, "tags": ["a", "b"]}, "event_time": "2023-01-01"}:

立即学习“Python免费学习笔记(深入)”;

import json
import tensorflow as tf
<p>def parse_json_string(json_str):</p><div class="aritcle_card flexRow">
                                                        <div class="artcardd flexRow">
                                                                <a class="aritcle_card_img" href="/xiazai/skill11765" title="Expanso yaml-to-json"><img
                                                                                src="https://img.php.cn/upload/skill/001/246/273/6adaf20dbae7c507.jpg" alt="Expanso yaml-to-json" ></a>
                                                                <div class="aritcle_card_info flexColumn">
                                                                        <a href="/xiazai/skill11765" title="Expanso yaml-to-json">Expanso yaml-to-json</a>
                                                                        <p>使用 Expanso Edge 管道将 YAML 输入转换为 JSON 格式。</p>
                                                                </div>
                                                                <a href="/xiazai/skill11765" title="Expanso yaml-to-json" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
                                                        </div>
                                                </div><h1>json_str 是 tf.string 张量,需先转为 Python str</h1><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">json_bytes = json_str.numpy()
data = json.loads(json_bytes.decode('utf-8'))
return (
    data['user']['id'],
    data['user']['tags'],
    data['event_time']
)

def tf_parse_json(json_str):

输出必须声明 dtype 和 shape;tags 是变长 list,用 tf.string 并设 shape=None

id_out, tags_out, time_out = tf.py_function(
    func=parse_json_string,
    inp=[json_str],
    Tout=[tf.int32, tf.string, tf.string]
)
# tags 是一维字符串张量,但长度不确定 → 设 shape=[None]
tags_out.set_shape([None])
time_out.set_shape([])  # scalar
return {'user_id': id_out, 'tags': tags_out, 'timestamp': time_out}

构建 dataset

json_lines = tf.data.Dataset.from_tensor_slices([ b'{"user": {"id": 101, "tags": ["login", "mobile"]}, "event_time": "2023-05-01"}', b'{"user": {"id": 202, "tags": ["search"]}, "event_time": "2023-05-02"}' ]) parsed_ds = json_lines.map(tf_parse_json)

嵌套结构复杂时,提前 flatten 再喂给模型

TensorFlow 模型输入通常要求扁平、固定 shape 的张量(如 tf.float32 矩阵)。如果 JSON 含深层嵌套(如多层 list-of-dict)、混合类型或缺失字段,硬塞进 <code>tf.py_function 会很快失控。更可靠的做法是:在解析后立即做结构规整,例如:

  • 用 pandas.json_normalize() 扁平化嵌套字段(适合离线预处理)
  • 对变长字段(如 "tags")统一截断/填充为固定长度,并转成 tf.SparseTensor 或 one-hot 编码
  • 把时间字符串转为 Unix timestamp(int64),避免模型接触字符串
  • 缺失字段补默认值(如 user.id 缺失时设为 -1),并加 mask 标记

别指望 tf.data 自动处理 schema 变化 —— JSON 字段增减、类型漂移(比如某次 "id" 变成字符串)都会在 runtime 报错,且堆栈难读。

性能敏感场景慎用 tf.py_function

每次调用 tf.py_function 都会退出图执行、进入 Python 环境,带来显著开销。如果 JSON 数据量大(GB 级)、字段简单(如全是数字),更高效的方式是:用 jq 或 millispec 在 shell 层预处理成 CSV/TFRecord,再用 tf.data.experimental.make_csv_dataset 或 tf.data.TFRecordDataset 加载。

另一个现实约束:GPU 无法加速 JSON 解析。所有 tf.py_function 内部逻辑都在 CPU 上运行,且无法被 tf.data.AUTOTUNE 有效调度 —— 如果 pipeline 瓶颈出现在这里,优先考虑预处理而非优化解析函数本身。

真正棘手的不是“怎么解析”,而是“怎么让解析结果稳定适配模型输入层”。字段命名变更、空数组、null 值、编码混杂(UTF-8 vs latin-1)这些细节,比语法本身更容易导致训练中途崩溃。

热门AI工具

更多
小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1891

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

5184

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1829

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

31357

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3707

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3727

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1243

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

616

2023.08.10

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn