使用 substr 和 indexOf 解析错误消息不起作用

Parsing error message using substr and indexOf not working

我正在尝试从收到的错误消息中提取子字符串并将其解析为 JSON。但是,indexOf 或子字符串方法似乎没有按预期工作。

这是我尝试解析的完整错误消息:

processing response error (body="{\"jsonrpc\":\"2.0\",\"id\":223,\"error\":{\"code\":-32000,\"message\":\"intrinsic gas too low\"}}", error={"code":-32000}, requestBody="{\"method\":\"eth_sendRawTransaction\",\"params\":[\"0xf8a85b843b9aca0082520894ad6d458402f60fd3bd25163575031acdce07538d80b844a9059cbb000000000000000000000000ca3f2ee61e5afd8072e351fff1e6da3d47e0e9ab0000000000000000000000000000000000000000000000000de0b6b3a764000029a0c9bc6207b2c1bd1413235f28200fef961acc00aa1e9c38fdb0c864a64441b5afa0169756bd13450d07c1bfbcbc12902d77015b832a1aab4d9a3f25b40d0259fa07\"],\"id\":223,\"jsonrpc\":\"2.0\"}", requestMethod="POST")

基本上我试图以编程方式提取此 JSON 字符串:

"{\"jsonrpc\":\"2.0\",\"id\":223,\"error\":{\"code\":-32000,\"message\":\"intrinsic gas too low\"}}"

为此,我想结合使用 indexOf 和子字符串方法:

.catch(e => {
        const firstChar = e.message.indexOf('{')
        const lastChar = e.message.indexOf('}') + 1
        console.log(firstChar, lastChar)
        const substring = e.message.substr(firstChar, lastChar)
        console.log(substring)
      })

似乎找到了正确的起始索引,但找不到正确的结束索引,我不知道为什么。结果如下:

{\"jsonrpc\":\"2.0\",\"id\":57,\"error\":{\"code\":-32000,\"message\":\"intrinsic gas too low\"}}", error={"code":-32000}, reque

如果有人知道我在这里做错了什么以及如何解决它,请告诉我!

javascript substr 函数需要 2 个参数。

第一个是 start 索引,第二个是要获取的 start 索引中字符串的 length

检查代码段。

const message = `processing response error (body="{\"jsonrpc\":\"2.0\",\"id\":223,\"error\":{\"code\":-32000,\"message\":\"intrinsic gas too low\"}}", error={"code":-32000}, requestBody="{\"method\":\"eth_sendRawTransaction\",\"params\":[\"0xf8a85b843b9aca0082520894ad6d458402f60fd3bd25163575031acdce07538d80b844a9059cbb000000000000000000000000ca3f2ee61e5afd8072e351fff1e6da3d47e0e9ab0000000000000000000000000000000000000000000000000de0b6b3a764000029a0c9bc6207b2c1bd1413235f28200fef961acc00aa1e9c38fdb0c864a64441b5afa0169756bd13450d07c1bfbcbc12902d77015b832a1aab4d9a3f25b40d0259fa07\"],\"id\":223,\"jsonrpc\":\"2.0\"}", requestMethod="POST")`;

const firstChar = message.indexOf('{')
const lastChar = message.indexOf('}') + 1
console.log(firstChar, lastChar)
const substring = message.substr(firstChar, lastChar - firstChar + 1)
console.log(substring)