流式接口返回的数据如下 id: 0 event: Message data: {"content":"由于“1222”没有具体专利描述内容,无法确定其所属技术领域。请提供详细专利描述。 ","content_type":"text","node_execute_uuid":"7527604220124594186","node_id":"142383","node_is_finish":true,"node_seq_id":"0","node_title":"所属技术领域","node_type":"Message"} id: 1 event: Message data: {"content":"编号为1222相关专利","content_type":"text","node_execute_uuid":"7527604220124626954","node_id":"142684","node_is_finish":true,"node_seq_id":"0","node_title":"初拟的发明名称","node_type":"Message"} id: 2 event: Message data: {"content":"在专利价值评估领域,现有的技术主要依赖于对专利属性与专利价值之间关系的定量分析。这些方法通常使用专利续展信息作为专利私有价值的代理变量,并采用logit回归模型等统计方法进行影响评估分析。然而,这些技术在处理离散与复杂创新的专利价值评估时存在局限性。例如,现有技术往往忽视了技术分类对专利价值评估的影响,未能充分考虑不同技术领域间的差异性。此外,现有技术在评估非居民专利与居民专利价值差异时也存在不足。这些问题限制了专利价值评估的准确性和适用性。\n\n针对上述技术痛点,相关领域已有部分研究进行探索。例如,论文“Assessing the Impact of Patent Attributes on the Value of Discrete and Complex Innovations”[1]评估了专利的社会价值与私有价值之间的联系,并发现技术分类在专利价值评估中起着重要作用。然而,该研究未能深入探讨不同技术领域间的差异性及其对专利价值评估的影响。另一篇论文“Eco-driving Intelligent Systems and Algorithms: A Patent Review”[2]提供了生态驾驶智能系统和算法的专利综述,分析了424项专利并揭示了专利在不同技术领域的分布情况。尽管该研究为生态驾驶领域的专利分析提供了宝贵的参考,但在专利价值评估方面仍存在不足,未能系统性地解决现有技术中的核心问题。\n\n这些方案均未系统性地解决当前技术中的核心问题,主要存在以下技术问题:\n1. 现有技术在评估离散与复杂创新的专利价值时,未能充分考虑技术分类的影响,导致评估结果的准确性和适用性受限。\n2. 现有技术在评估非居民专利与居民专利价值差异时存在不足,未能全面揭示不同专利主体的价值差异。\n3. 现有技术在专利价值评估中缺乏对不同技术领域间差异性的深入分析,限制了评估结果的精细化和针对性。\n\n为此,本技术方案提出了一种基于技术分类和专利主体差异性的专利价值评估方法,通过构建多维度专利价值评估模型,综合考虑技术分类、专利主体差异性等因素,以提高专利价值评估的准确性和适用性。\n\n","content_type":"text","node_execute_uuid":"7527604271077146633","node_id":"130856","node_is_finish":true,"node_seq_id":"0","node_title":"背景技术","node_type":"Message"} 这是返回的三次结果 如何每次准确的获取到data后的{}中的内容
时间: 2025-07-27 17:12:08 AIGC 浏览: 19
### 从流式接口返回的每个事件中提取 `data` 字段的 JSON 内容
在处理流式接口(如 Server-Sent Events,SSE)时,数据通常以事件的形式分块传输。每个事件可能包含多个字段,其中 `data` 字段用于存储实际的数据内容。为了准确提取并解析这些数据,需采用特定的处理逻辑。
---
#### 使用 `EventSource` 解析 SSE 流式响应中的 JSON 数据
当使用 `EventSource` 接收服务器推送的消息时,可以通过监听 `message` 事件来获取每一条完整的事件数据。由于每个事件的 `data` 字段通常是 JSON 格式的内容,因此可以直接调用 `JSON.parse()` 进行解析。
```javascript
const eventSource = new EventSource('https://api.example.com/sse-endpoint');
eventSource.addEventListener('message', function(event) {
try {
const data = JSON.parse(event.data);
console.log('Parsed JSON data:', data);
} catch (error) {
console.error('Failed to parse JSON:', error);
}
});
```
此方法适用于服务器每次发送完整 JSON 数据的情况,并且确保了数据的完整性与可解析性[^3]。
---
#### 处理流式响应中的不完整 JSON 数据
在某些情况下,流式接口可能不会一次性发送完整的 JSON 数据,而是将数据拆分为多个片段进行传输。此时需要手动拼接这些数据片段,并在确认数据完整后进行解析。
可以使用 `ReadableStream` 和 `TextDecoder` 来实现这一过程:
```javascript
async function fetchStreamingJson(url, body) {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(body),
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const reader = response.body.getReader();
const decoder = new TextDecoder('utf-8');
let buffer = '';
while (true) {
const { done, value } = await reader.read();
if (done) break;
buffer += decoder.decode(value, { stream: true });
try {
const json = JSON.parse(buffer);
console.log('Received JSON:', json);
// 在此处处理完整的 JSON 数据
} catch (e) {
// 数据不完整或格式错误,继续等待下一块
continue;
}
}
reader.releaseLock();
}
```
上述代码通过维护一个字符串缓冲区 `buffer` 来暂存尚未解析完成的数据片段,并在每次接收到新数据后尝试解析整个缓冲内容。若解析失败,则说明当前数据仍不完整,程序会继续接收后续数据块[^2]。
---
#### 使用 `jsonuri` 库处理流式 JSON 数据的拼接
在某些 AI 流式传输场景中,数据可能是以增量更新的方式传输的。例如,模型输出的每一部分都可能是一个 JSON 对象中的某个字段值。这种情况下,可以使用 `jsonuri` 库来逐步拼接这些数据片段。
```javascript
import { get, set } from 'jsonuri';
let data = {
answer: '',
details: '',
related_questions: [],
};
function updateData(uri, delta) {
const currentValue = get(data, uri);
set(data, uri, (currentValue || '') + delta);
}
// 示例:假设 uri 是 "/answer",delta 是 "Hello"
updateData('/answer', 'Hello');
console.log(data); // 输出: { answer: 'Hello', ... }
```
这种方式特别适用于需要对 JSON 中的特定字段进行增量更新的场景,确保最终能形成一个完整的结构化数据对象。
---
#### 处理多个事件流中的 JSON 数据
如果流式接口支持多类型事件(如 `data`、`error`、`end` 等),则可以通过为每种事件绑定独立的监听器来分别处理不同类型的响应。例如,在 `EventSource` 中:
```javascript
const eventSource = new EventSource('https://api.example.com/sse-endpoint');
eventSource.addEventListener('data', function(event) {
try {
const data = JSON.parse(event.data);
console.log('Data event:', data);
} catch (error) {
console.error('Failed to parse data event:', error);
}
});
eventSource.addEventListener('end', function(event) {
console.log('Stream ended:', event.data);
});
```
此类方式允许更精细地控制不同类型事件的处理流程,同时确保每个事件中的 JSON 数据都能被正确提取和解析[^1]。
---
阅读全文