Error occurred While try to parsing JSON String using java

后端 未结 3 1864
离开以前
离开以前 2020-12-21 12:14

I\'m trying to parse the JSON string using java. I don\'t know How to do that, I searched lot in internet and I got some idea. With that I have build code, but it doesn\'t w

3条回答
  •  太阳男子
    2020-12-21 12:34

    Your json is wrong to parse in Java. The maximum value of Long is 9223372036854775807 in Java but in your json you are exceeding it. Json can access really really long numbers, but java won't.

    Just change number types in json as String after that you are good to go. Look at the following example.

    {
      "read": "2015-05-07T19:30:48.165009273+05:30",
      "network": {
        "rx_bytes": 11124,
        "rx_packets": 116,
        "rx_errors": 0,
        "rx_dropped": 0,
        "tx_bytes": 648,
        "tx_packets": 8,
        "tx_errors": 0,
        "tx_dropped": 0
      },
      "cpu_stats": {
        "cpu_usage": {
          "total_usage": 157158138204,
          "percpu_usage": [
            157158138204
          ],
          "usage_in_kernelmode": 49530000000,
          "usage_in_usermode": 58420000000
        },
        "system_cpu_usage": 258964110000000,
        "throttling_data": {
          "periods": 0,
          "throttled_periods": 0,
          "throttled_time": 0
        }
      },
      "memory_stats": {
        "usage": 73969664,
        "max_usage": 74600448,
        "stats": {
          "active_anon": 73928704,
          "active_file": 4096,
          "cache": 86016,
          "hierarchical_memory_limit": "18446744073709552000898498494949849849849849849849849849841998498498484984",
          "inactive_anon": 4096,
          "inactive_file": 32768,
          "mapped_file": 32768,
          "pgfault": 62880,
          "pgmajfault": 0,
          "pgpgin": 34656,
          "pgpgout": 34482,
          "rss": 73883648,
          "rss_huge": 67108864,
          "total_active_anon": 73928704,
          "total_active_file": 4096,
          "total_cache": 86016,
          "total_inactive_anon": 4096,
          "total_inactive_file": 32768,
          "total_mapped_file": 32768,
          "total_pgfault": 62880,
          "total_pgmajfault": 0,
          "total_pgpgin": 34656,
          "total_pgpgout": 34482,
          "total_rss": 73883648,
          "total_rss_huge": 67108864,
          "total_unevictable": 0,
          "total_writeback": 0,
          "unevictable": 0,
          "writeback": 0
        },
        "failcnt": 0,
        "limit": 2099310592
      },
      "blkio_stats": {
        "io_service_bytes_recursive": [],
        "io_serviced_recursive": [],
        "io_queue_recursive": [],
        "io_service_time_recursive": [],
        "io_wait_time_recursive": [],
        "io_merged_recursive": [],
        "io_time_recursive": [],
        "sectors_recursive": []
      }
    }
    

    Edit: After @Jon Skeet's comment i realised, he's right about Json simple. In a different json parser you can easilly parse your json, and it will handle it as BigInteger. BigInteger has no limit.

    Here's an example:

    try{
                String line = "{'read':'2015-05-07T19:30:48.165009273+05:30','network':{'rx_bytes':11124,'rx_packets':116,'rx_errors':0,'rx_dropped':0,'tx_bytes':648,'tx_packets':8,'tx_errors':0,'tx_dropped':0},'cpu_stats':{'cpu_usage':{'total_usage':157158138204,'percpu_usage':[157158138204],'usage_in_kernelmode':49530000000,'usage_in_usermode':58420000000},'system_cpu_usage':258964110000000,'throttling_data':{'periods':0,'throttled_periods':0,'throttled_time':0}},'memory_stats':{'usage':73969664,'max_usage':74600448,'stats':{'active_anon':73928704,'active_file':4096,'cache':86016,'hierarchical_memory_limit':18446744073709552000,'inactive_anon':4096,'inactive_file':32768,'mapped_file':32768,'pgfault':62880,'pgmajfault':0,'pgpgin':34656,'pgpgout':34482,'rss':73883648,'rss_huge':67108864,'total_active_anon':73928704,'total_active_file':4096,'total_cache':86016,'total_inactive_anon':4096,'total_inactive_file':32768,'total_mapped_file':32768,'total_pgfault':62880,'total_pgmajfault':0,'total_pgpgin':34656,'total_pgpgout':34482,'total_rss':73883648,'total_rss_huge':67108864,'total_unevictable':0,'total_writeback':0,'unevictable':0,'writeback':0},'failcnt':0,'limit':2099310592},'blkio_stats':{'io_service_bytes_recursive':[],'io_serviced_recursive':[],'io_queue_recursive':[],'io_service_time_recursive':[],'io_wait_time_recursive':[],'io_merged_recursive':[],'io_time_recursive':[],'sectors_recursive':[]}}";
                line = line.replaceAll( "'", "\"" );
                while( line != null ){
    
                    JsonObject asJsonObject = new JsonParser().parse( line ).getAsJsonObject().get( "network" ).getAsJsonObject();
                    Set> entrySet = asJsonObject.entrySet();
    
                    for( Entry entry : entrySet ){
                        System.out.println( entry.getKey() + " : " + entry.getValue() );
                    }
                }
            }
            catch( Exception e ){
                System.out.println( "Error occured :" + e );
            }
    

    I used gson to parse your json. Thanks @Jon Skeet.

提交回复
热议问题