Google工作表应用程序脚本:如何使用JSON格式器?

qpgpyjmq  于 2023-03-20  发布在  Go
关注(0)|答案(2)|浏览(130)

我在excel单元格中有JSON文本,但很难阅读。我想格式化文本,以便更容易阅读变量/值。

var ss = SpreadsheetApp.getActive();
 var jVal = ss.getRange('N145').getValue();
 var jFormat = JSON.stringify(jVal,null, 3);
 SpreadsheetApp.getUi().alert(jFormat);

Google工作表中的文本:

{payload:{client:"something",messages:[{name:"something",contentType:"something",messageType:"something",content:"something",liveChatGroupType:"",chatCondition:"something",liveChatGroup:"something"}],version:"2.0",params:{type:"dtree"}},messageType:"PAYLOAD"}

我得到的输出为:

"{payload:{client:\"something\",messages:[{name:\"something\",contentType:\"something\",messageType:\"something\",content:\"something\",liveChatGroupType:\"\",chatCondition:\"something\",liveChatGroup:\"something\"}],version:\"2.0\",params:{type:\"dtree\"}},messageType:\"PAYLOAD\"}"

我想看起来像:

{
   "payload":{
      "client":"something",
      "messages":[
         {
            "name":"something",
            "contentType":"something",
            "messageType":"something",
            "content":"something",
            "liveChatGroupType":"",
            "chatCondition":"something",
            "liveChatGroup":"something"
         }
      ],
      "version":"2.0",
      "params":{
         "type":"dtree"
      }
   },
   "messageType":"PAYLOAD"
}
wz8daaqr

wz8daaqr1#

建议:检查JSON格式,然后在JSON.stringify中使用JSON.parse

在格式方面,您需要编辑指定单元格中的JSON,将键设置为字符串,因为getValue()函数只读取values of type Number, Boolean, Date, or String。因此,JSON对象将被自动读取为字符串值(这将导致您的帖子的输出)。
作为解决方法,您可以更改:

{payload:{client:"something",messages:[{name:"something",contentType:"something",messageType:"something",content:"something",liveChatGroupType:"",chatCondition:"something",liveChatGroup:"something"}],version:"2.0",params:{type:"dtree"}},messageType:"PAYLOAD"}

致:

{"payload":{"client":"something","messages":[{"name":"something","contentType":"something","messageType":"something","content":"something","liveChatGroupType":"","chatCondition":"something","liveChatGroup":"something"}],"version":"2.0","params":{"type":"dtree"}},"messageType":"PAYLOAD"}

之后,您可以使用下面修改过的脚本在警报弹出窗口中显示json:

function test() {
  var ss = SpreadsheetApp.getActive();
  var jVal = ss.getRange('A2').getValue();
  var jFormat = JSON.stringify(JSON.parse(jVal),null,3);
  console.log(jFormat)
  SpreadsheetApp.getUi().alert(jFormat);
}

在上面的脚本中,getValue()读取的字符串首先使用JSON.parse转换为JSON对象,然后使用JSON.stringify转换回格式化字符串以供显示。
控制台输出应如下所示:

警报弹出窗口应如下所示:

参考文献:

rdrgkggo

rdrgkggo2#

数据不符合JSON。主要问题是许多元素的双引号被去掉了。正如@PatrickdC所指出的,数据必须转换为符合JSON的格式。
假设您的输出位于单元格B1中。

  • 单元格B2:=REGEXREPLACE(B1,"[{]","{""")
  • 在 * 大括号后插入双引号 *
  • 单元格B3:=REGEXREPLACE(B2,"[:]",""":")
  • 在 * 冒号前插入双引号
  • 单元格B4:=REGEXREPLACE(B3,"[,]",",""")
  • 在 * 逗号后插入双引号 *
    样品

打印美化的JSON

参考Indent pretty JSON in Google Sheet Apps Script

相关问题