gpt4 book ai didi

java - 由 : com. google.gson.JsonSyntaxException : com. google.gson.stream.MalformedJsonException: Expected ':' at line 引起

转载 作者:行者123 更新时间:2023-11-30 11:05:00 34 4
gpt4 key购买 nike

我在 stackoverflow 上看到了同样的问题,它讲述了 Json 中额外的逗号和空格。但这对我没有帮助。

我有一个带有 POJO 的这种格式的 json

 {"binary":[
{
"attributeIndex": 4,
"attributeValue": "no",
"binaryValue": "1,0"
},
{
"attributeIndex": 4,
"attributeValue": "yes",
"binaryValue": "0,1"
}
]}

POJO

public class BinPojo {

/**
* @param args
*/
int attributeIndex;
String attributeValue;
String binaryValue;
and

public class BinaryPojo {

/**
* @param args
*/
JSONArray binary;

我正在尝试获取 attributeIndex、attributeValue、binaryValue 值但是我收到了这个错误

Caused by: com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 65
at com.google.gson.Gson.fromJson(Gson.java:818)
at com.google.gson.Gson.fromJson(Gson.java:768)
at com.google.gson.Gson.fromJson(Gson.java:717)
at com.google.gson.Gson.fromJson(Gson.java:689)

BinPojo getData = gson.fromJson(meta.get(j).toString(), BinPojo.class);

我的代码:

JSONArray meta = new JSONArray();
//file read
String setupData = bf.readLine();
BinaryPojo d = gson.fromJson(setupData, BinaryPojo.class);
meta = d.getBinary();

//JSONArray meta which holds the JSON data
for (int j = 0; j < meta.size(); j++) {
BinPojo getData = gson.fromJson(meta.get(j).toString(), BinPojo.class);
System.out.println("gson"+gson.toJson(getData));
int attrIndex = getData.getAttributeIndex();
System.out.println("attrIndex: "+attrIndex);
String attrVal = getData.getAttributeValue();
}

可能是什么原因。它告诉我我的 JSON 是坏的。我该如何调试它。

编辑

打印后:

System.out.println("meta: "+meta.get(j).toString());

我的结果是

meta: {attributeIndex=0.0, attributeValue=Middleaged, binaryValue=1,0,0}

for (int j = 0; j < meta.size(); j++) {
System.out.println("meta: "+meta.get(j).toString());
BinPojo getData = null ;
try{
getData = gson.fromJson(meta.get(j).toString(), BinPojo.class);
}catch(Exception e){
e.printStackTrace();
}
System.out.println("gson "+gson.toJson(getData));
int attrIndex = getData.getAttributeIndex();
System.out.println("attrIndex: "+attrIndex);
String attrVal = getData.getAttributeValue();
}

getData 返回 null。

gson null
java.lang.Exception: java.lang.NullPointerException
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:354)
Caused by: java.lang.NullPointerException

最佳答案

啊!我认为那是你的问题。您使用的是“JSON-Simple”库 (org.json.simple.*) 而不是“JSON for Java”库 (org.json.*) .它们都有名为 JSONArray 的类。但是来自 JSON-Simple 的 org.json.simple.JSONArray 不像 org.json.JSONArray 那样从它的 toString() 方法返回 JSON > 来自“Java 的 JSON”。

您需要在 JSONArrayJSONObject 对象上使用 toJSONString()

密切关注您实际使用的库。在您的问题中包括它们(最好带有版本号)将使回答此类问题变得更加容易。类名在项目中不是唯一的。

关于java - 由 : com. google.gson.JsonSyntaxException : com. google.gson.stream.MalformedJsonException: Expected ':' at line 引起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29815642/

34 4 0