来自JSON格式的根对象的getJSONArray - Java

时间:2017-11-27 17:18:49

标签: java arrays json string object

我花了最近几天尝试将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........

1 个答案:

答案 0 :(得分:0)

正如评论中提到的,正如您所见,您无法在非JSON上使用JSON解析器。我采取以下方法:

  1. 如果这符合已知格式的规格,有人可能会编写一个JSON转换器来运行它。

  2. 如果是自定义格式,但每行都是可预测的格式且不依赖于之前或之后的任何内容,则可以通过a运行每一行自定义转换器并给它“JSON-ness”。&#39; (添加逗号等)按时处理每一行,而不是试图一次分割整个行。

  3. 如果以上都不是真的,你需要进入正则表达式地狱。对不起:(