代码之家  ›  专栏  ›  技术社区  ›  AbdulRehman Younas

使用freemarker模板将字符串转换为JSON对象

  •  0
  • AbdulRehman Younas  · 技术社区  · 2 年前
    <#assign loanInformation = '{"8":{"loanId":"8","employeeId":"7","loanType":"1","totalAmount":"100000","installmentAmount":"6666.67","remainingBalance":"93333.33","loanTitle":"ELR - EMP739 Umar Naeem (5/1/2024) (House Loan)"},"9":{"loanId":"9","employeeId":"7","loanType":"2","totalAmount":"100000","installmentAmount":"10000","remainingBalance":"90000.0","loanTitle":"ELR-9 (Car Loan)"}}'>
    
    <#assign loanInfoJason = loanInformation?eval_json>
    <#list loanInfoJason as loan>
      <tr class="bb">
        <td align="center" class="br">${loan.loanTitle}</td>
        <td align="center" class="br">${loan.installmentAmount}</td>
        <td align="center">${loan.remainingBalance}</td>
      </tr>
    </#list>
    

    这在freemarker模板中运行良好,但如果

    <#assign loanInformation=record.custrecord_dsc_psf_lian_ded_info_json>

    获取错误

    无法“?eval_json”字符串,错误为:---开始消息---无效的json关键字:“Lorem”。应为以下其中之一:true、false、null。如果它是一个字符串,那么它必须被引用。错误位置:第1行,第1列:Lorem ipsum dolor sit amet consectetuer ac orci…^---结束消息---失败的表达式:===>贷款信息?eval_json[在第290行第25列的模板“template”中]-FTL堆栈跟踪(“~”表示与嵌套相关):-失败于:#assign loanInfo=loanInformation。。。[在第5列第290行的模板“template”中]

    当使用变量时,eval_json应该能够返回有效的json。

    1 回复  |  直到 2 年前
        1
  •  0
  •   d.k    2 年前

    当使用变量时,eval_json应该能够返回有效的json。

    不,你在概念层面上错了。 eval_json 返回一个数据结构(通常取决于使用的环境/编程语言),但该数据是从有效的JSON字符串派生的。 在您的示例中,当您在第1行使用硬编码字符串时 <#assign loanInformation = '{"8":{"loan … 它能够提供价值,正如我所说 不是JSON 但是当您从记录的字段中获取值时 custrecord_dsc_psf_loan_ded_info_json ,其中包含 lorem ipsum 文本,当然没有办法从中合理地确定数据结构,所以JSON解析器抛出。

    很可能你有一个字段的记录 custrrecord_dsc_psf_lian_ded_info_json . 该字段只包含一个“lorem ipsum”文本,您正试图将其处理为JSON。当然这是行不通的。

    将JSON值放入字段中。就像您在模板中硬编码的一样:

    {
        "8": {
            "loanId": "8",
            "employeeId": "7",
            "loanType": "1",
            "totalAmount": "100000",
            "installmentAmount": "6666.67",
            "remainingBalance": "93333.33",
            "loanTitle": "ELR - EMP739 Umar Naeem (5/1/2024) (House Loan)"
        },
        "9": {
            "loanId": "9",
            "employeeId": "7",
            "loanType": "2",
            "totalAmount": "100000",
            "installmentAmount": "10000",
            "remainingBalance": "90000.0",
            "loanTitle": "ELR-9 (Car Loan)"
        }
    }
    

    而不是 lorem ipsum dolor sit amet