gpt4 book ai didi

java - 奇怪的 jackson 非法字符((CTRL-CHAR,代码0)) map 缩减组合器中的异常

转载 作者:IT老高 更新时间:2023-10-28 20:48:09 25 4
gpt4 key购买 nike

我有一个带有映射器的 Map-Reduce 作业,它获取一条记录并将其转换为一个对象,即 MyObject 的一个实例,它使用 Jackson 编码为 JSON。该值只是记录中的另一个文本字段。

映射器的相关部分如下所示:

ObjectMapper mapper = new ObjectMapper();
MyObject val = new MyObject();
val.setA(stringA);
val.setB(stringB);
Writer strWriter = new StringWriter();
mapper.writeValue(strWriter, val);
key.set(strWriter.toString());

映射器的输出被发送到组合器,组合器解码 JSON 对象并聚合键值对。它在概念上非常简单,类似于:

public void reduce(Text key, Iterable<IntWritable> values, Context cxt) 
throws IOException, InterruptedException {
int count = 0;
TermIndex x = _mapper.readValue(key.toString(), MyObject.class);
for (IntWritable int : values) ++count;
...
emit (key, value)
}

MyObject 类由两个字段(均为字符串)、get/set 方法和一个默认构造函数组成。其中一个字段存储基于网络爬取的文本片段,但始终是字符串。

public class MyObject {
private String A;
private String B;

public MyObject() {}

public String getA() {
return A;
}
public void setA(String A) {
this.A = A;
}
public String getB() {
return B;
}
public void setIdx(String B) {
this.B = B;
}
}

我的 MapReduce 作业似乎运行良好,直到它到达某些我无法轻松访问的记录(因为映射器正在通过爬网生成记录),并且引发了以下异常:

Error: com.fasterxml.jackson.core.JsonParseException: 

Illegal character ((CTRL-CHAR, code 0)): only regular white space (\r, \n, \t) is allowed between tokens
at [Source: java.io.StringReader@5ae2bee7; line: 1, column: 3]

有人对造成这种情况的原因有什么建议吗?

最佳答案

  • 您可以使用StringUtils从 Apache Commons 库逃脱字符串。
  • 或者您可以选择性地替换 控制字符JSON 编码(marshal)处理之前的字符串。

你也可以引用这篇文章: Illegal character - CTRL-CHAR

关于java - 奇怪的 jackson 非法字符((CTRL-CHAR,代码0)) map 缩减组合器中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24832614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com