当前位置: 首页 > 知识库问答 >
问题:

Jackson ObjectMapper配置-错误JSONParseException:意外字符('b'(代码98)):

韩弘方
2023-03-14
[{"empNo":"2390","empName":"JAMES","projects":{"projectId":209,"projectName":"Z560"}}]
private static final ObjectMapper om = new ObjectMapper();
static {
    om.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);
    om.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
    om.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, 
                 true);
    om.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, 
                 false);
    om.getSerializationConfig().setSerializationInclusion
   (JsonSerialize.Inclusion.NON_NULL);
   }

com.sun.jersey.spi.container.containerresponse mapMappableContainerException严重:MappableContainerException中包含的异常无法映射到响应,重新抛出到HTTP容器org.codehaus.jackson.JsonParseException:意外字符(“b”(代码98)):在[source:java.io.StringReader@1FEF0B44;行:1,列:2]处应为有效值(数字、字符串、数组、对象、“true”、“false”或“null”)

预期产出为

{"empNo":"2390","empName":"JAMES","projectId":"209","projectName":"Z560"}

共有1个答案

王修为
2023-03-14

有点冗长,可以优化。更多信息请参阅本文。

public static void main(String[] args) throws IOException {
        String originalJson = "{\"empNo\":\"2390\",\"empName\":\"JAMES\",\"projects\":{\"projectId\":209,\"projectName\":\"Z560\"}}";
        try {
            JSONObject jsonObject = new JSONObject(originalJson);
            Map<String, Object> map = getMap(jsonObject);
            System.out.println("My Old Map => " + map);

            Map<String, Object> newMap = new HashMap<String, Object>();

            for (Map.Entry<String, Object> entry : map.entrySet()) {
                if (entry.getKey().equals("projects")) {
                    Map<String, Object> projectMap = (Map<String, Object>) entry.getValue();
                    for (Map.Entry<String, Object> entry1 : projectMap.entrySet()) {
                        newMap.put(entry1.getKey(), entry1.getValue());
                    }
                } else {
                    newMap.put(entry.getKey(), entry.getValue().toString());
                }
            }

            JSONObject jsonObject1 = new JSONObject(newMap);
            System.out.println("My New Map => " + newMap);
            System.out.println("Expected Json String => " + jsonObject1.toString());

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private static Map getMap(JSONObject object) {
        Map<String, Object> map = new HashMap<String, Object>();

        Object jsonObject = null;
        String key = null;
        Object value = null;

        try {
            Iterator<String> keys = object.keys();
            while (keys.hasNext()) {

                key = null;
                value = null;

                key = keys.next();

                if (null != key && !object.isNull(key)) {
                    value = object.get(key);
                }

                if (value instanceof JSONObject) {
                    map.put(key, getMap((JSONObject) value));
                    continue;
                }

                if (value instanceof JSONArray) {
                    JSONArray array = ((JSONArray) value);
                    List list = new ArrayList();
                    for (int i = 0 ; i < array.length() ; i++) {
                        jsonObject = array.get(i);
                        if (jsonObject instanceof JSONObject) {
                            list.add(getMap((JSONObject) jsonObject));
                        } else {
                            list.add(jsonObject);
                        }
                    }
                    map.put(key, list);
                    continue;
                }

                map.put(key, value);
            }
        } catch (Exception e) {
            System.out.println(e);
        }
        return map;
    }

输出

我的旧地图=>{projects={projectd=209,projectname=z560},empname=james,empno=2390}

 类似资料:
  • }如果您运行该代码,您会发现它工作得很好。那么问题出在哪里?我必须在Oracle NoSQL数据库上执行同样的操作。了解与数据检索相关的任何部分并不重要,因为它们工作得很好,我已经测试过它们。代码非常相似: 我的目标是获得与第一段代码完全相同的结果。根据我的类tweet的属性,由''分隔的值字符串。 但是,这段代码被压缩在一个Jar文件中,并由数据库在记录的所有tweet上运行。我无法看到发生了什

  • 我在数据库中有一个Json字符串,但在Java对象中转换时,它给出了以下错误:

  • 嘿,我遇到了一个关于与jackson反序列化的问题,这里是我尝试过的和我得到的错误。 错误:com。fasterxml。杰克逊。果心JsonParseException:意外字符('}'(代码125)):应以双引号开始字段名 Java代码 我的JSON

  • 问题内容: 我收到此错误: JSON.parse:意外字符 当我在firebug中运行以下语句时: 为什么会这样呢?JSON字符串对我来说似乎是正确的,我也使用JSHint对其进行了测试。在上述情况下,传递的对象是服务器响应,其内容类型设置为 问题答案: 您不是在解析字符串,而是在解析一个已经解析的对象:)

  • 问题内容: 我有一个无法调试的JSON解析错误。代码如下: 和JSON: 在Firefox中,错误为“ SyntaxError:JSON.parse:意外字符”,在Chrome中为“未捕获的SyntaxError:意外令牌C” 有任何想法吗? 编辑:这在我的本地主机设置上工作正常。 * 问题答案: 如果服务器正在发送有效的JSON,则无需调用,因为jQuery在检索响应时会自动对其进行解析。我不知

  • 我正在尝试将java绑定到一个Xamarin forms项目,该jar包含具有$的类名和具有$的变量名。我得到“意外字符$”错误。我试图通过编辑metadata.xml文件来解决这个问题。看来我做错了,请检查以下条目, 对于包含$的类名。我在用, 提前感谢,