我花了最近几天尝试将JSON字符串格式化为JSON对象,但这不是通常的json字符串。我从一个网址接收它并没有问题将其转换为字符串但是当我要创建JSON对象时,我发现了很多问题。 JSON看起来像这样:
header {
gtfs_realtime_version: "1.0"
incrementality: FULL_DATASET
timestamp: 1511789066
}
entity {
id: "294-131-39-562-4732025"
vehicle {
trip {
trip_id: "131-39-562-4732025"
route_id: "131"
}
position {
latitude: 3.44351
longitude: -76.52622
}
timestamp: 1511789065
stop_id: "501450"
vehicle {
id: "21002"
label: "MC21002"
license_plate: "VCQ452"
}
}
}
entity {
id: "1087-431-55-35-4732025"
vehicle {
trip {
trip_id: "431-55-35-4732025"
route_id: "431"
}
position {
latitude: 3.3767517
longitude: -76.54276
}
timestamp: 1511789065
stop_id: "502150"
vehicle {
id: "31038"
label: "MC31038"
}
}
}
你可以看到没有数组,也没有逗号分隔我需要处理的元素(实体),我甚至无法从根获取JSONObject。 有什么建议? 这是我尝试过的最后一段代码,我删除了标题,将所有实体对象插入到数组总线中,并用逗号分隔,但没有用
//getRespuesta(); gives me the string
//Log.d("LIVE", "RAW JSon: " + getRespuesta());
String[] parts = getRespuesta().split("[}]", 2);
String[] splitter = parts[1].split("(?=entity)");
String finalString = splitter[1];
for (int t = 2; t < splitter.length; t++) {
finalString = finalString + ",\n" + splitter[t];
}
Log.d("LIVEL", "SIZE: " + splitter[1]);
String JSonChunk = "{ \n \"buses\": [ \n " + finalString + "\n ] \n }";
//String JSonChunk = "{ \n " + parts[1] + "\n }";
try {
// Log.d("LIVE", "CHUNKED JSon: " + JSonChunk);
JSONObject json = new JSONObject(JSonChunk);
}catch........
答案 0 :(得分:0)
正如评论中提到的,正如您所见,您无法在非JSON上使用JSON解析器。我采取以下方法:
如果这符合已知格式的规格,有人可能会编写一个JSON转换器来运行它。
如果是自定义格式,但每行都是可预测的格式且不依赖于之前或之后的任何内容,则可以通过a运行每一行自定义转换器并给它“JSON-ness”。&#39; (添加逗号等)按时处理每一行,而不是试图一次分割整个行。
如果以上都不是真的,你需要进入正则表达式地狱。对不起:(