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

如何在JavaScript中将动态字符串JSON显示到Div或Textarea中

如何将API返回的嵌套转义JSON格式化后显示到DIV或TEXTAREA

问题场景

调用API返回的JSON包含多层转义的嵌套JSON字符串(比如示例中Val2字段的值是转义后的JSON),直接显示会保留转义字符,无法呈现清晰的层级结构,需要先解析嵌套内容再格式化展示。

解决步骤

核心思路是先递归解析所有嵌套的转义JSON字符串,再对完整的JSON对象进行格式化缩进,最后插入到目标DOM元素中。

1. 递归解析嵌套转义JSON

写一个工具函数,遍历JSON对象的每个属性值,判断是否为可解析的JSON字符串,若是则递归解析成对象:

function parseNestedJson(obj) {
  // 处理数组情况
  if (Array.isArray(obj)) {
    return obj.map(item => parseNestedJson(item));
  }
  // 处理对象情况
  if (typeof obj === 'object' && obj !== null) {
    for (const key in obj) {
      if (Object.prototype.hasOwnProperty.call(obj, key)) {
        const value = obj[key];
        // 尝试解析字符串类型的嵌套JSON
        if (typeof value === 'string') {
          try {
            const parsed = JSON.parse(value);
            obj[key] = parseNestedJson(parsed);
          } catch (e) {
            // 解析失败则保留原字符串
            continue;
          }
        } else if (typeof value === 'object') {
          // 递归处理嵌套对象/数组
          obj[key] = parseNestedJson(value);
        }
      }
    }
    return obj;
  }
  return obj;
}

2. 格式化并插入到DOM元素

解析完成后,用JSON.stringify的第三个参数设置缩进,再将结果插入到DIV或TEXTAREA:

示例HTML结构
<!-- 用于显示的DIV -->
<div id="jsonDisplay" style="white-space: pre-wrap; font-family: monospace; padding: 10px; background: #f5f5f5;"></div>

<!-- 或用于编辑的TEXTAREA -->
<textarea id="jsonTextarea" rows="10" cols="80" style="font-family: monospace;"></textarea>
完整JS逻辑
// 模拟API返回的JSON数据(替换为实际接口返回值)
const apiResponse = '{"id":255,"Val2":"\n  {\"Id\": 28, \"deta\": \"\n  {\n   \\\"strategy1\\\":{\\\"$type\\\":\\\"Text1, text2\\\"}}\"}"}';

// 1. 先解析顶层JSON
let parsedData = JSON.parse(apiResponse);
// 2. 递归解析嵌套的转义JSON
parsedData = parseNestedJson(parsedData);
// 3. 格式化JSON,设置2个空格缩进(可调整为4)
const formattedJson = JSON.stringify(parsedData, null, 2);

// 插入到DIV
document.getElementById('jsonDisplay').textContent = formattedJson;
// 插入到TEXTAREA
document.getElementById('jsonTextarea').value = formattedJson;

3. 效果说明

处理后会将多层转义的JSON解析为完整的嵌套对象,格式化后呈现清晰的层级结构,和预期的<pre>标签内格式一致。如果用DIV显示,需设置white-space: pre-wrap保留缩进和换行;TEXTAREA会自动保留格式。

内容的提问来源于stack exchange,提问作者mohd afzal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:55:24