2011-04-05 166 views
3

如何解析Android中的巨大JSON文件?解析Android中的巨大JSON对象?

当我解析这样的文件我在像这样的日志中看到:

04-05 15:55:46.490: DEBUG/dalvikvm(3847): GC freed 12159 objects/557744 bytes in 142ms 
04-05 15:55:46.490: INFO/global(3847): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required. 
04-05 15:55:46.650: DEBUG/dalvikvm(3847): GC freed 56 objects/100176 bytes in 115ms 
04-05 15:55:46.660: INFO/dalvikvm-heap(3847): Grow heap (frag case) to 4.207MB for 110626-byte allocation 
04-05 15:55:46.760: DEBUG/dalvikvm(3847): GC freed 0 objects/0 bytes in 104ms 
04-05 15:55:46.890: DEBUG/dalvikvm(3847): GC freed 3 objects/73856 bytes in 115ms 
04-05 15:55:47.050: DEBUG/dalvikvm(3847): GC freed 7 objects/110872 bytes in 113ms 
04-05 15:55:47.050: INFO/dalvikvm-heap(3847): Grow heap (frag case) to 4.426MB for 248896-byte allocation 
04-05 15:55:47.150: DEBUG/dalvikvm(3847): GC freed 0 objects/0 bytes in 104ms 
04-05 15:55:47.310: DEBUG/dalvikvm(3847): GC freed 8 objects/166232 bytes in 106ms 
04-05 15:55:47.310: INFO/dalvikvm-heap(3847): Grow heap (frag case) to 4.624MB for 373340-byte allocation 
04-05 15:55:47.420: DEBUG/dalvikvm(3847): GC freed 0 objects/0 bytes in 106ms 
04-05 15:55:47.580: DEBUG/dalvikvm(3847): GC freed 10 objects/249288 bytes in 111ms 
04-05 15:55:47.590: INFO/dalvikvm-heap(3847): Grow heap (frag case) to 4.920MB for 560006-byte allocation 
04-05 15:55:47.690: DEBUG/dalvikvm(3847): GC freed 0 objects/0 bytes in 98ms 
04-05 15:55:47.810: DEBUG/dalvikvm(3847): GC freed 12 objects/373792 bytes in 88ms 
04-05 15:55:47.910: DEBUG/dalvikvm(3847): GC freed 4 objects/560088 bytes in 87ms 
04-05 15:55:48.010: DEBUG/dalvikvm(3847): GC freed 5 objects/128 bytes in 88ms 
04-05 15:55:48.010: INFO/dalvikvm-heap(3847): Grow heap (frag case) to 5.350MB for 461302-byte allocation 
04-05 15:55:48.130: DEBUG/dalvikvm(3847): GC freed 0 objects/0 bytes in 120ms 
04-05 15:55:48.990: DEBUG/dalvikvm(3847): GC freed 10419 objects/1383992 bytes in 109ms 
04-05 15:55:49.720: DEBUG/dalvikvm(3847): GC freed 8769 objects/384360 bytes in 115ms 
04-05 15:55:50.550: DEBUG/dalvikvm(3847): GC freed 10472 objects/454880 bytes in 129ms 
04-05 15:55:51.590: DEBUG/dalvikvm(3847): GC freed 12663 objects/554440 bytes in 147ms 

有没有对JSON文件pull解析器?如何处理这样的事情?

+2

这就是你的问题:巨大的文件,Android(这意味着移动)。重新思考为什么你首先需要做到这一点,然后避免在* mobile *设备上做这么多工作。 – 2011-04-05 14:03:49

+1

有XML文件的拉解析器,所以巨大的JSON文件不应该是一个问题。 – pixel 2011-04-05 14:06:09

+1

我通常也会得到'INFO/global(3847):BufferedReader构造函数中使用的默认缓冲区大小。如果需要8k字符的缓冲区,最好是明确的。消息 – 2011-04-05 14:07:24

回答

7

看看Jackson JSON解析器,它比Android中的更快,比GSON更快,并且支持流式传输。

http://jackson.codehaus.org/

我不过重申他人提出的观点,你的JSON是巨大的,这确实表明非最佳设计。例如如果连接不稳定并且几次失败,则可能会导致用户在移动数据计划上产生额外的数据成本。在可能的情况下总是更好地分解它,所以失败并不涉及再次请求整个地段。

+1

gson在过去一直很慢。我需要给杰克逊一枪。 – 2011-04-05 14:41:23

3

如果您正在寻找一个接口来传输json对象,而不是立即解析所有内容,那么您可以在gson中查看JsonStreamParser