尝试对 JSON 消息进行分区的 ClassCastException
ClassCastException trying to partition JSON messages
我正在尝试编写自定义 Kafka Partitioner(逻辑基于值而不是键)
该值有一个 JSON 字符串
“对象值”的示例 =“{姓名:“约翰”,年龄:31,城市:“纽约”}”
public class JsonPartitioner implements Partitioner {
public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {
int partitionNumber = 0;
String jsonStringValue = (String)value;// this is giving exception
jsonStringValue = jsonStringValue.toLowerCase();
JSONObject obj = new JSONObject(jsonString);
}
}
错误
java.lang.ClassCastException: [B 无法转换为 java.lang.String 在 com.xxx.yyy.kafka.partitioner.JsonPartitioner.partition(JsonPartitioner.java:86) ~[JsonPartitioner-0.0.1-SNAPSHOT.jar:?]
我不确定,如何将传入对象转换为字符串然后再转换为 json
寻求帮助
Error java.lang.ClassCastException: [B cannot be cast to java.lang.String
[B
表示 byte[]
:请参阅 javadoc 以获得 Class.getName()
。因此,您正试图将 byte[]
转换为 String
。如果你有一个 byte[]
你可以使用 String
构造函数之一从它创建一个字符串。你不能 cast a byte[]
to a String
.
另请注意,当您从 byte[]
创建 String
时,您需要知道并使用正确的字节字符编码。如果您使用了错误的字符编码,您可能会在字符串中出现乱码。
这可能是正确的方法...
String jsonStringValue = new String((byte[]) value); // this uses the platform
// default character encoding
参考String
javadoc其他可能更合适的构造函数。
我正在尝试编写自定义 Kafka Partitioner(逻辑基于值而不是键) 该值有一个 JSON 字符串 “对象值”的示例 =“{姓名:“约翰”,年龄:31,城市:“纽约”}”
public class JsonPartitioner implements Partitioner {
public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {
int partitionNumber = 0;
String jsonStringValue = (String)value;// this is giving exception
jsonStringValue = jsonStringValue.toLowerCase();
JSONObject obj = new JSONObject(jsonString);
}
}
错误 java.lang.ClassCastException: [B 无法转换为 java.lang.String 在 com.xxx.yyy.kafka.partitioner.JsonPartitioner.partition(JsonPartitioner.java:86) ~[JsonPartitioner-0.0.1-SNAPSHOT.jar:?]
我不确定,如何将传入对象转换为字符串然后再转换为 json 寻求帮助
Error java.lang.ClassCastException: [B cannot be cast to java.lang.String
[B
表示 byte[]
:请参阅 javadoc 以获得 Class.getName()
。因此,您正试图将 byte[]
转换为 String
。如果你有一个 byte[]
你可以使用 String
构造函数之一从它创建一个字符串。你不能 cast a byte[]
to a String
.
另请注意,当您从 byte[]
创建 String
时,您需要知道并使用正确的字节字符编码。如果您使用了错误的字符编码,您可能会在字符串中出现乱码。
这可能是正确的方法...
String jsonStringValue = new String((byte[]) value); // this uses the platform
// default character encoding
参考String
javadoc其他可能更合适的构造函数。