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

Python3解析字节数组并获取最大receivedTimestamp值

解决连续拼接JSON的解析与最大值提取问题

首先,你的问题核心在于这段数据是两个独立JSON对象直接拼接而成的非标准JSON格式,直接用json.loads()解析肯定会失败。而且原始字节里还包含HTML实体",得先处理成正常的双引号。下面给你两种可行的解决方法,优先推荐第二种更健壮的方案:

方法一:简单分割(适合格式固定的场景)

如果你的数据始终是多个{...}直接拼接,没有嵌套的{},可以先把HTML实体替换成双引号,再用'}{'作为分隔符拆分,最后给拆分后的每个片段补上首尾的括号,再逐个解析:

import json

# 原始字节数组
raw_data = b'{"receivedTimestamp":1604484102747,"application":"MMT","messageType":"BusEvent","utcTimestamp":1604484102711,"data":[{"id":56476901531}]}{"receivedTimestamp":1604484102748,"application":"MMT","messageType":"BusEvent","utcTimestamp":1604484102711,"data":[{"id":56476901532}]}'

# 1. 解码为字符串并替换HTML实体
json_str = raw_data.decode('utf-8').replace('"', '"')

# 2. 拆分拼接的JSON对象
json_parts = json_str.split('}{')
# 给每个片段补全括号
json_objs = []
for i, part in enumerate(json_parts):
    if i == 0:
        # 第一个片段只需要补结尾的}
        full_part = part + '}'
    elif i == len(json_parts)-1:
        # 最后一个片段只需要补开头的{
        full_part = '{' + part
    else:
        full_part = '{' + part + '}'
    json_objs.append(json.loads(full_part))

# 3. 提取最大的receivedTimestamp
max_ts = max(obj['receivedTimestamp'] for obj in json_objs)
print(max_ts)  # 输出: 1604484102748

方法二:用JSONDecoder.raw_decode(健壮通用方案)

如果数据里可能有嵌套的{}(比如data字段里的对象),简单分割会出错。这时可以用Python标准库的json.JSONDecoder.raw_decode()方法,它能解析出一个合法的JSON对象,并返回解析后剩余的字符串,循环处理直到所有数据都解析完成:

import json

raw_data = b'{"receivedTimestamp":1604484102747,"application":"MMT","messageType":"BusEvent","utcTimestamp":1604484102711,"data":[{"id":56476901531}]}{"receivedTimestamp":1604484102748,"application":"MMT","messageType":"BusEvent","utcTimestamp":1604484102711,"data":[{"id":56476901532}]}'

# 处理HTML实体并转成字符串
json_str = raw_data.decode('utf-8').replace('"', '"')

decoder = json.JSONDecoder()
pos = 0
json_objs = []

while pos < len(json_str):
    try:
        obj, pos = decoder.raw_decode(json_str, pos)
        json_objs.append(obj)
    except json.JSONDecodeError:
        # 跳过可能的空白字符(如果有的话)
        pos += 1

# 提取最大值
max_ts = max(obj['receivedTimestamp'] for obj in json_objs)
print(max_ts)  # 输出: 1604484102748

关键步骤说明

  1. HTML实体替换:原始字节里的&quot;是HTML的双引号实体,必须先替换成"才能被JSON解析器识别。
  2. 非标准JSON的拆分:拼接的JSON不是合法的JSON数组,所以必须拆分成单个合法对象再解析,raw_decode是最可靠的方式,能处理嵌套结构。
  3. 最大值提取:用生成器表达式遍历所有解析后的对象,直接取receivedTimestamp的最大值即可。

内容的提问来源于stack exchange,提问作者Naveen Srikanth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:37:47