JSON错误消息

问题描述 投票:0回答:2

我写了这个JSON代码

public class TestClass {

    public static void main(String[] args) {
        String inputJson= "{" +"\"contexts\" : {  "+ "{ " + "\"times\" : { " + "{  " + "\"end\":17, " + "\"begin\" : 9 " +  "}" + "}," +    "\"contextname\":\"OFFICE_HOURS\" " +   "}," + "{ " + "\"days\": { " + "\"MON\", " +    "\"TUE\", " + "\"WED\" , " + "\"THU\", " +  "\"FRI\" " +    "} , " + "\"contextname\" : \"WORKDAYS\" " +    "}";
        ObjectMapper mapper= new ObjectMapper();
        mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);

        try {

            MainParser mp= mapper.readValue(inputJson, MainParser.class);

            System.out.println(mp.getContextname());
        }

但我在控制台框中发现了这个错误

org.codehaus.jackson.JsonParseException: Unexpected character ('{' (code 123)): was expecting double-quote to start field name
 at [Source: java.io.StringReader@7cf10a6f; line: 1, column: 19]

我需要帮助

java json
2个回答
2
投票

格式化时,您的JSON如下所示:

{
  "contexts": {
    {
      "times": {
        {
          "end": 17,
          "begin": 9
        }
      },
      "contextname": "OFFICE_HOURS"
    },
    {
      "days": {
        "MON",
        "TUE",
        "WED",
        "THU",
        "FRI"
      },
      "contextname": "WORKDAYS"
    }

由于多种原因,这是无效的。

您可以通过将“contexts”的内容替换为数组并将日期包装在数组中并删除一些额外的大括号来使其有效。

{
  "contexts": [
    {
      "times": {
        "end": 17,
        "begin": 9
      },
      "contextname": "OFFICE_HOURS"
    },
    {
      "days": [
        "MON",
        "TUE",
        "WED",
        "THU",
        "FRI"
      ],
      "contextname": "WORKDAYS"
    }
  ]
}

更好的方法是使用“contextname”值作为键并简化整个JSON。

{
  "OFFICE_HOURS": {
    "end": 17,
    "begin": 9
  },
  "WORKDAYS": [
    "MON",
    "TUE",
    "WED",
    "THU",
    "FRI"
  ]
}

0
投票

以下是根据代码的Json字符串。它不是正确的json格式。

{“contexts”:{{“times”:{{“end”:17,“begin”:9}},“contextname”:“OFFICE_HOURS”},{“days”:{“MON”,“TUE”, “WED”,“THU”,“FRI”},“contextname”:“WORKDAYS”}

尝试修复json字符串格式并再次运行代码。

© www.soinside.com 2019 - 2024. All rights reserved.