Skip to content

Instantly share code, notes, and snippets.

@akhenakh
Created May 29, 2023 18:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save akhenakh/180a9830dd4105c3640c5a97db5e21e2 to your computer and use it in GitHub Desktop.
Save akhenakh/180a9830dd4105c3640c5a97db5e21e2 to your computer and use it in GitHub Desktop.
Convert big GeoJSON FeatureCollections into a line by line features without loading the full file into memory
package main
import (
"bufio"
"encoding/json"
"io"
"os"
"github.com/peterstace/simplefeatures/geom"
)
func main() {
r := bufio.NewReader(os.Stdin)
decoder := json.NewDecoder(r)
var f geom.GeoJSONFeature
for {
token, err := decoder.Token()
if err == io.EOF {
break
}
if err != nil {
panic(err)
}
if token == "features" {
_, err = decoder.Token()
if err != nil {
panic(err)
}
break
}
}
enc := json.NewEncoder(os.Stdout)
for decoder.More() {
if err := decoder.Decode(&f); err != nil {
panic(err)
}
if err := enc.Encode(f); err != nil {
panic(err)
}
}
}
@akhenakh
Copy link
Author

jq is great but the command cat big.geoson | jq -c '.features[]' > big.geojsonseq is using a lot of memory.

Use this snippet like this.

mkdir jsonparser
cd jsonparser
# copy this gist into main.go
go mod init jsonparser
go build

cat big.geoson |./jsonparser > big.geojsonseq

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment