【问题标题】:groovy.json.JsonException: expecting '}' or ',' but got current chargroovy.json.JsonException: 期待 '}' 或 ',' 但得到了当前字符
【发布时间】:2019-05-04 01:16:14
【问题描述】:

我正在尝试让一段代码为我工作,但运气不佳。所以我把代码分解成这个让我伤心的小sn-p。

谁能帮助确定为什么会发生这个错误?

import groovy.json.JsonSlurper;

String index = '[{accessCode=d20in9t, createdAt=2016-09-22T18:27:47.904Z, id=22cbf7c2-5d4e-4afe-a385-ddefb6e6dcf0, licenseType=mobileAppLicensesWithDevice, name=Lead Retrieval - Device Rental & App license, owner={entityType=exhibitor, id=df04e5e4-b69a-4585-8a26-659a8f8ae15f}, readableId=npy5gcqnz8t, termId=630493a4-4a70-4f4f-afaf-31610c14c181, updatedAt=2016-09-22T18:27:47.904Z}, {accessCode=fqcg0w9, createdAt=2016-09-22T18:27:47.904Z, id=74270a86-dfe8-4b58-82e7-080dd57ce57a, licenseType=mobileAppLicensesWithDevice, name=Lead Retrieval - Device Rental & App license, owner={entityType=exhibitor, id=df04e5e4-b69a-4585-8a26-659a8f8ae15f}, readableId=3atchw5lhai, termId=630493a4-4a70-4f4f-afaf-31610c14c181, updatedAt=2016-09-22T18:27:47.904Z}, {accessCode=o6eg9dp, createdAt=2016-09-22T18:27:47.904Z, id=8cc4f312-dae4-4daf-99cb-d060165ec8e8, licenseType=mobileAppLicensesWithDevice, name=Lead Retrieval - Device Rental & App license, owner={entityType=exhibitor, id=df04e5e4-b69a-4585-8a26-659a8f8ae15f}, readableId=q9pqu7nm5oa, termId=630493a4-4a70-4f4f-afaf-31610c14c181, updatedAt=2016-09-22T18:27:47.904Z}]'

def slurper = new groovy.json.JsonSlurper().parseText(index)
slurper.each {
    println(it)
}

http://ideone.com/3RrxyX

这是我在脚本中运行它时遇到的错误...

groovy.json.JsonException: expecting '}' or ',' but got current char 'a' with an int value of 97
           The current character read is 'a' with an int value of 97
          expecting '}' or ',' but got current char 'a' with an int value of 97
          line number 1
          index number 2
          [{accessCode=uvrbjeg, createdAt=2016-09-22T19:53:27.971Z, id=0328fce8-832d-499d-a19a-571ce19ce117, licenseType=mobileAppLicensesWithDevice, name=Lead Retrieval - Device Rental & App license, owner={entityType=exhibitor, id=6c3b0b9f-fed0-4b62-a241-f42b896dc0ff}, readableId=5btnmmqe49m, termId=630493a4-4a70-4f4f-afaf-31610c14c181, updatedAt=2016-09-22T19:53:27.971Z}, {accessCode=8fzwy2p, createdAt=2016-09-22T19:53:27.971Z, id=33db29b4-0e0d-449f-9ecf-f126dd745c87, licenseType=mobileAppLicensesWithDevice, name=Lead Retrieval - Device Rental & App license, owner={entityType=exhibitor, id=6c3b0b9f-fed0-4b62-a241-f42b896dc0ff}, readableId=izs6wr742ea, termId=630493a4-4a70-4f4f-afaf-31610c14c181, updatedAt=2016-09-22T19:53:27.971Z}, {accessCode=d4hjfue, createdAt=2016-09-22T19:53:27.971Z, id=8d49d092-3f2f-4801-85ae-aebca5d507d4, licenseType=mobileAppLicensesWithDevice, name=Lead Retrieval - Device Rental & App license, owner={entityType=exhibitor, id=6c3b0b9f-fed0-4b62-a241-f42b896dc0ff}, readableId=ur1onrasbd7, termId=630493a4-4a70-4f4f-afaf-31610c14c181, updatedAt=2016-09-22T19:53:27.971Z}]

任何想法都会很好地帮助解决这个问题。

【问题讨论】:

    标签: json groovy


    【解决方案1】:

    您可以更改字符串格式以更正 JSON(带引号的键) 或者您可以更改 JsonSlurper 的解析器类型:

    new JsonSlurper().setType(JsonParserType.LAX).parseText(index)
    

    【讨论】:

    • 最好将 json 更改为实际上是 json
    • 什么是索引?
    • 问题的价值
    【解决方案2】:

    Json 键必须用双引号引起来

    你所有的值都是字符串,所以它们也需要用双引号。

    您还需要"key":"value" 而不是使用=

    String index = '[{"accessCode":"d20in9t", "createdAt":"2016-09-22T18:27:47.904Z", "id":"22cbf7c2-5d4e-4afe-a385-ddefb6e6dcf0", "licenseType":"mobileAppLicensesWithDevice", "name":"Lead Retrieval - Device Rental & App license", "owner":{"entityType":"exhibitor", "id":"df04e5e4-b69a-4585-8a26-659a8f8ae15f"}, "readableId":"npy5gcqnz8t", "termId":"630493a4-4a70-4f4f-afaf-31610c14c181", "updatedAt":"2016-09-22T18:27:47.904Z"}, {"accessCode:"fqcg0w9", "createdAt":"2016-09-22T18:27:47.904Z", "id":"74270a86-dfe8-4b58-82e7-080dd57ce57a", "licenseType":"mobileAppLicensesWithDevice", "name":"Lead Retrieval - Device Rental & App license", "owner":{"entityType":"exhibitor", "id":"df04e5e4-b69a-4585-8a26-659a8f8ae15f"}, "readableId":"3atchw5lhai", "termId":"630493a4-4a70-4f4f-afaf-31610c14c181", "updatedAt":"2016-09-22T18:27:47.904Z"}, {"accessCode":"o6eg9dp", "createdAt":"2016-09-22T18:27:47.904Z", "id":"8cc4f312-dae4-4daf-99cb-d060165ec8e8", "licenseType":"mobileAppLicensesWithDevice", "name":"Lead Retrieval - Device Rental & App license", "owner":{"entityType"="exhibitor", "id":"df04e5e4-b69a-4585-8a26-659a8f8ae15f"}, "readableId":"q9pqu7nm5oa", "termId":"630493a4-4a70-4f4f-afaf-31610c14c181", "updatedAt":"2016-09-22T18:27:47.904Z"}]'
    

    【讨论】:

    • 天哪!就是这样!非常感谢您的帮助,看起来我需要看看我是如何在对这些数据进行 API 调用时获得我的 JSON 结果的。再次感谢,您是救生员!
    • 所以我使用 Groovy RESTClient 库来执行我的 API 调用。当我打电话时,它似乎去掉了所有的引号。有什么简单的方法可以阻止这种情况吗?还是我需要考虑另一种选择?
    【解决方案3】:

    格式不正确的 json

    • 我有一个 python 代码生成了一个格式错误的 python 代码,其中
    "{"enabled": True}"
    
    • 问题在于该值不是有效的json 代码。
      • “True”值应使用双引号。

    Groovy 解析器对此感到困惑,并因上述错误而失败

    解决方案

    • 确保任何 json 代码都有效

    【讨论】:

      猜你喜欢
      • 2020-11-09
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2021-08-15
      • 2022-12-22
      相关资源
      最近更新 更多