Skip to content Skip to sidebar Skip to footer

Split Json File Objects Into Multiple Files

I have a file with too many data objects in JSON of the following form: { 'type': 'FeatureCollection', 'features': [ { 'type': 'Feature', 'properties': {},

Solution 1:

Here's a solution requiring just one invocation of jq and one of awk, assuming the input is in a file (input.json) and that the N-th component should be written to a file /tmp/file$N.json beginning with N=1:

jq -c '.features = (.features[] | [.]) 'input.json |
  awk '{ print > "/tmp/file" NR ".json"}'

An alternative to awk here would be split -l 1.

If you want each of the output files to be "pretty-printed", then using a shell such as bash, you could (at the cost of n additional calls to jq) write:

N=0
jq -c '.features = (.features[] | [.])' input.json |
  whileread -r json ; do
  N=$((N+1))
  jq . <<< "$json"  > "/tmp/file${N}.json"done

Each of the additional calls to jq will be fast, so this may be acceptable.

Solution 2:

PowerShell solution (requires PowerShell v3 or newer):

$i = 0
Get-Content 'C:\path\to\input.json' -Raw |
  ConvertFrom-Json |
  Select-Object -Expand features |
  ForEach-Object {
    $filename = 'C:\path\to\feature{0:d5}.json' -f ($i++)

    $properties = [ordered]@{
      type     = 'FeatureCollection'
      features = $_
    }

    New-Object -Type PSObject -Property $properties |
      ConvertTo-Json -Depth 10 |
      Set-Content $filename
  }

Solution 3:

I haven't tested this code properly. But should provide you some idea on how you can solve the problem mentioned above

var json = {
        "type": "FeatureCollection",
        "features": [
          {
            "type": "Feature",
            "properties": {},
            "geometry": {
              "type": "Polygon",
              "coordinates": [
                [
                  [
                    -37.880859375,
                    78.81903553711727
                  ],
                  [
                    -42.01171875,
                    78.31385955743478
                  ],
                  [
                    -37.6171875,
                    78.06198918665974
                  ],
                  [
                    -37.880859375,
                    78.81903553711727
                  ]
                ]
              ]
            }
          },
          {
            "type": "Feature",
            "properties": {},
            "geometry": {
              "type": "Polygon",
              "coordinates": [
                [
                  [
                    -37.6171875,
                    78.07107600956168
                  ],
                  [
                    -35.48583984375,
                    78.42019327591201
                  ],
                  [
                    -37.880859375,
                    78.81903553711727
                  ],
                  [
                    -37.6171875,
                    78.07107600956168
                  ]
                ]
              ]
            }
          }
        ]
      }
      $(document).ready(function(){
        var counter = 1;
        json.features.forEach(function(feature){
          var data = {type: json.type, features: [feature]}
          var newJson = JSON.stringify(data);
          var blob = newBlob([newJson], {type: "application/json"});
          var url  = URL.createObjectURL(blob);
          var a = document.createElement('a');
          a.download    = "feature_" + counter + ".json";
          a.href        = url;
          a.textContent = "Download feature_" + counter + ".json";
          counter++;
          document.getElementById('feature').appendChild(a);
          document.getElementById('feature').appendChild(document.createElement('br'));
        });
      });
<scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><divid="feature"></div>

Post a Comment for "Split Json File Objects Into Multiple Files"