使用 TypeScript 将 JSON(来自 Sentry)转换为 HTML

2023-12-31

我想学习 TypeScript。

我有一个由哨兵方法返回的 JSON 字典event_from_exception()(Python)。

我想将其格式化为带有可扩展局部变量以及前后上下文的漂亮 HTML。结果应该大致如下所示:

下面是一个 json 示例:

{
  "exception": {
    "values": [
      {
        "stacktrace": {
          "frames": [
            {
              "function": "main", 
              "abs_path": "/home/modlink_cok_d/src/sentry-json.py", 
              "pre_context": [
                "from sentry_sdk.utils import event_from_exception", 
                "", 
                "def main():", 
                "    local_var = 1", 
                "    try:"
              ], 
              "lineno": 9, 
              "vars": {
                "exc": "ValueError()", 
                "local_var": "1"
              }, 
              "context_line": "        raise ValueError()", 
              "post_context": [
                "    except Exception as exc:", 
                "        event, info = event_from_exception(sys.exc_info(), with_locals=True)", 
                "        print(json.dumps(event, indent=2))", 
                "", 
                "main()"
              ], 
              "module": "__main__", 
              "filename": "sentry-json.py"
            }
          ]
        }, 
        "type": "ValueError", 
        "value": "", 
        "module": "exceptions", 
        "mechanism": null
      }
    ]
  }, 
  "level": "error"
}

这怎么用 TypeScript 来完成呢?


  1. 为您的数据创建架构。这将帮助您使用 TypeScript 和 IDE。

您可以使用https://app.quicktype.io https://app.quicktype.io这给了你。

export interface Welcome {
    exception: Exception;
    level:     string;
}

export interface Exception {
    values: Value[];
}

export interface Value {
    stacktrace: Stacktrace;
    type:       string;
    value:      string;
    module:     string;
    mechanism:  null;
}

export interface Stacktrace {
    frames: Frame[];
}

export interface Frame {
    function:     string;
    abs_path:     string;
    pre_context:  string[];
    lineno:       number;
    vars:         Vars;
    context_line: string;
    post_context: string[];
    module:       string;
    filename:     string;
}

export interface Vars {
    exc:       string;
    local_var: string;
}
  1. 从您的渲染 HTMLdata.

您可以使用模板文字 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals如果您没有更喜欢的 Web 框架(React、Vue)。

const data = JSON.parse(json);
const html = `
    <div>${data.exception.values.map(value => `
        <div>${value.stacktrace.frames.map(frame => `
            <div>
                <pre>${frame.abs_path} in ${frame.function}</pre>
                <div style="margin-left:2rem">
                    ${frame.pre_context.map((line, i) =>`
                        <pre>${frame.lineno + i - frame.pre_context.length}. ${line}</pre>
                    `).join("")}

                    <pre><strong>${frame.lineno}. ${frame.context_line}</strong></pre>
                    ${frame.post_context.map((line, i) => `
                        <pre>${frame.lineno + i + 1}. ${line}</pre>
                    `).join("")}
                </div>
            </div>
        `).join("")}</div>
    `).join("")}</div>
`;
document.body.innerHTML = html;

例如:https://codesandbox.io/s/52x8r17zo4 https://codesandbox.io/s/52x8r17zo4

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 TypeScript 将 JSON(来自 Sentry)转换为 HTML 的相关文章

  • 检查 JavaScript 字符串是否为 URL

    JavaScript 有没有办法检查字符串是否是 URL 正则表达式被排除在外 因为 URL 很可能是这样写的stackoverflow 也就是说它可能没有 com www or http 如果你想检查一个字符串是否是有效的 HTTP UR
  • 如何防止 Iframe 在与浏览器交互后弄乱浏览器的历史记录?

    因此 就我而言 我使用 Iframe 将 Grafana 附加到我的页面 这为我提供了漂亮且易于使用的图表 可以注意到 每次在图表上进行放大或缩小 使用鼠标单击 交互后 Grafana 的 Iframe 都会在我的 Angular 页面上触
  • Meteor:应用程序无法在 0.9.1.1 版本上运行

    出现类似错误 Error TypeError undefined is not a function evaluating Template create anonymous function iron dynamic template j
  • 如何抑制窗口鼠标滚轮滚动...?

    我正在开发嵌入页面中的画布应用程序 我有它 因此您可以使用鼠标滚轮放大绘图 但不幸的是 这会滚动页面 因为它是文章的一部分 当我在 dom 元素上滚动鼠标滚轮时 是否可以阻止鼠标滚轮在窗口上滚动 附加鼠标滚轮 不是 Gecko DOMMou
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 无法通过节点应用程序连接到redis,两者都在docker中

    我正在尝试将我的应用程序连接到 redis 但我得到 ioredis Unhandled error event Error connect ECONNREFUSED 127 0 0 1 6379 当我做 docker exec it ed
  • 如何将 Google Charts 与 Vue.js 库一起使用?

    我正在尝试使用 Vue js 库使用 Google Charts 制作图表 但我不知道如何添加到 div 这是我尝试做的 这是如何使用普通 javascript 添加图表 这是文档的代码示例 https developers google
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • 是否有“npmpublish-f”的解决方法

    现在npm publish f已弃用 是否有解决方法或软件包可以覆盖发布后的目标版本 我知道关于semver http semver org 我还想要npm publish f 您可以取消发布特定版本 然后重新发布它 npm unpubli
  • 在 webpack 2.x 中使用 autoprefixer 和 postcss

    如何使用autoprefixer使用 webpack 2 x 以前 它曾经是这样的 module loaders test scss loader style css sass postcss postcss gt return autop
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • node.js 本身还是 nginx 前端来提供静态文件?

    是否有更快的基准或比较 将 nginx 放在节点前面并让它直接提供静态文件或仅使用节点并使用它提供静态文件 nginx 解决方案似乎对我来说更易于管理 有什么想法吗 我不得不不同意这里的答案 虽然 Node 可以做得很好 但如果配置正确 n
  • Angular 2+ 安全性;保护服务器上的延迟加载模块

    我有一个 Angular 2 应用程序 用户可以在其中输入个人数据 该数据在应用程序的另一部分进行分析 该部分仅适用于具有特定权限的人员 问题是我们不想让未经授权的人知道how我们正在分析这些数据 因此 如果他们能够在应用程序中查看模板 那
  • FireFox 中的自动滚动

    我的应用程序是实时聊天 我有一个 Div 来包装消息 每条消息都是一个 div 所以 在几条消息之后 我的 DOM 看起来像这样 div div Message number two div div div div
  • Angular 2获取元素高度

    我这里有一个非常简单的例子 它只是一个带有单个 div 的角度应用程序 是否可以获取div的角度高度 我想我可以用 ViewChild 和 offsetHeight 来做到这一点 import Component ElementRef Vi
  • Javascript转换时区问题

    我在转换当前时区的日期时间时遇到问题 我从服务器收到此日期字符串 格式为 2015 10 09T08 00 00 这是中部时间 但是当我使用 GMT 5 中的 new Date strDate 转换此日期时间时 它返回给我的信息如下 这是不
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • Mongoose - 查询从多个集合中获取数据

    我想要获取猫鼬的查询在 Node js 应用程序中 如下所述输出 user js comment js 和 post js 是我使用的模型文件 user js var mongoose require mongoose var Schema
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a
  • JSON:TypeError:Decimal('34.3')不是JSON可序列化的[重复]

    这个问题在这里已经有答案了 我正在运行一个 SQL 查询 它返回一个小数列表 当我尝试将其转换为 JSON 时 出现类型错误 查询 res db execute SELECT CAST SUM r SalesVolume 1000 0 AS

随机推荐

  • 如何使用 C# 连接到 Google Cloud SQL Server?

    我刚刚在 Google Cloud Platform 上设置了一个 SQL Server 我在那里创建了一个数据库和表 我使用微软的 SQL Server Management Studio SSMS 来连接并创建数据库和表 这一切都奏效了
  • 具有列名的多个列的最大值?

    我已经探索了许多关于如何从多个列中返回最大值以及列名的问题和答案 但我还没有解决问题 在这个问题中将解释 SQL MAX 多列 https stackoverflow com questions 71022 sql max of multi
  • 在 R 文本清理中删除标点符号但保留连字符短语

    有没有有效的方法可以删除文本中的标点符号 但保留连字符的表达方式 例如 容易发生事故 我使用以下函数来清理我的文本 clean text function x remove rt x gsub rt x remove at x gsub w
  • 网站上的弹出窗口每个会话加载一次[重复]

    这个问题在这里已经有答案了 我找到了一些制作 javascript jquery 弹出窗口的方法 但是 也存在一些问题 首先 我对这两种语言不是很好 只是初学者 如果有任何现成的代码 用于在网站加载时打开 POPUP 窗口 但每个浏览器会话
  • 如何强制 Linq to SQL 不使用缓存?

    当我两次进行相同的查询时 第二次它不会从数据库返回新行 我猜它只是使用缓存 这是一个 Windows 窗体应用程序 我在应用程序启动时在其中创建 dataContext 如何强制 Linq to SQL 不使用缓存 这是我遇到问题的示例函数
  • 如何在页面加载时激活 JS 数据过滤器?

    我正在这个网站上工作http fireworkslove com http fireworkslove com 我制作了具有不同类别 推荐 新闻等 的导航 我想在页面打开时显示 推荐 类别 data filter recommended 现
  • Erlang - 未定义的函数

    我正在尝试执行一个非常简单的 Erlang 代码 但它不起作用 我尝试过毫无问题地执行一些 hello worlds 但不是我自己的代码 module server Exported Functions export start 0 pro
  • 将组件的首选尺寸保留在 BorderLayout 的中心

    我有一个使用 BorderLayout 的中型 UI 中心是一个选项卡式窗格 包含具有各种布局的各种面板等 我希望该边框布局中心的面板根据以下尺寸调整大小 窗口 但我不希望面板内的组件拉伸 标签 组合框 文本字段 按钮 我希望它们保持首选大
  • 什么时候可以使用 Java 中的浮点类型进行货币计算?

    我了解到我不能使用浮点类型 float double在Java中 进行金钱计算 以及当我需要精确结果时的任何其他计算 我必须使用decimal数字类型 BigDecimal在 Java 中 代替 现在我想知道当我can使用浮点类型 他们提供
  • 使用 Convert.ToDouble 时出现异常

    我正在制作一个库存程序 要求用户输入他们想要购买的不同数量的不同物品 我使用此行将项目数转换为双精度数 以便我可以计算 但出现错误 指出我有未处理的格式异常 输入字符串的格式不正确 我有什么遗漏的吗 itembatteries Conver
  • Python Pandas 使用新的 x 轴进行插值

    我想对以下结构的 Pandas 系列进行插值 X 22 88 3 047 45 75 3 215 68 63 3 328 91 50 3 423 114 38 3 516 137 25 3 578 163 40 3 676 196 08 3
  • Jquery - 模拟点击按钮不触发功能

    Ok 所以我一直在使用 firebug 以及我编写的一些扩展来在我经常使用的网站上创建快捷方式 有件事我不明白为什么它不起作用或为什么它不可能 示例代码
  • 如何删除 mouseleave 上的下一个追加?

    我的代码有问题 当我mouseenter一个元素 一个工具栏被附加到这个元素上 但是当我mouseleave从工具栏到元素 工具栏会再次附加 我怎样才能防止这种重新附加 el on mouseenter function e var too
  • Android Studio 创建密钥库错误

    我想通过 Android Studio 生成签名的 APK 这是我的第一个应用程序 所以我需要创建新的密钥库 但是 当我填写文本框并单击 确定 时 出现错误 消息如下 密钥库已导出 但显示错误让我不敢使用它 创建密钥时出现错误 选择 JAV
  • R - 箱线图中的排序

    我正在尝试制作一系列箱形图R由 2 个因素分组 我已经成功地绘制了图 但我无法将盒子按正确的方向排序 我正在使用的数据场如下所示 Nitrogen Species Treatment 2 G L 3 R M 4 G H 4 B L 2 B
  • 更改/设置 gcloud 操作系统登录用户名?

    这么简单的问题 我正在向我的计算引擎添加一个新帐户 我添加了用户和角色以及所有有趣的东西 现在我想添加 ssh 密钥 我通过运行来执行此操作gcloud compute os login ssh keys add key file 这工作正
  • 如何让 Jest 静默测试抛出的错误

    我正在编写一个测试来断言如果提供了一个 prop 而没有提供另一个 prop 则组件会抛出错误 测试本身通过了 但控制台仍然抱怨未捕获的错误并打印整个堆栈跟踪 有没有办法让 Jest 停止打印此信息 因为它会污染测试运行程序并使其看起来像是
  • 如何使 Maven Javadoc 插件适用于任何 Java 版本

    我正在使用 Maven Javadoc 插件 如下所示
  • Java 中的无效字符常量?

    这是我的代码 import java util Scanner import javax swing JOptionPane import java text DecimalFormat Medium Speed Air 1100 feet
  • 使用 TypeScript 将 JSON(来自 Sentry)转换为 HTML

    我想学习 TypeScript 我有一个由哨兵方法返回的 JSON 字典event from exception Python 我想将其格式化为带有可扩展局部变量以及前后上下文的漂亮 HTML 结果应该大致如下所示 下面是一个 json 示