GeoJSON ist ein Datenformat zur Beschreibung geographischer Daten. Es ist eine Erweiterung der JavaScript Object Notation (kurz: JSON). Ähnlich XML handelt es sich um ein strukturiertes Datenformat, das ebenso einfach lesbar ist, aber wesentlich schlanker daher kommt.
Wie in allen vektorbasierten Datenmodellen ist die Grundeinheit ein so genanntes Feature, d.h. ein Objekt der realen Welt, das durch seine räumliche Verortung, seine Geometrie, und seine Eigenschaften oder Attribute beschrieben werden kann. Features, die der gleichen Art angehören, z.B. alle Straßen oder alle Eisenbahnlinien, können in einer so genannten FeatureCollection zusammen gefasst werden. Somit ist es mit GeoJSON möglich, mehrere Featuregruppen in einem Dokument abzubilden.

UML-Diagram des Geometriedatenmodells von GeoJSON.
GeoJSON orientiert sich an allgemein gültigen Prinzipien der geometrischen Beschreibung von Geodaten. Demnach können alle Objekte der realen Welt mit Hilfe von drei grundlegenden Geometrietypen abgebildet werden: Punkt, Linien und Fläche. Die kleinste Einheit ist dabei ein Punkt, der durch die Koordinaten in einem Bezugssystem beschrieben wird. Alle weiteren Geometrietypen bauen auf Punkten auf. Linien werden durch eine Folge von Punkten beschrieben. Flächen werden wiederum durch eine oder mehrere Linien beschrieben.
Die Position eines Punktes, oder Point, wird in GeoJSON durch ein Array aus zwei numerischen Werten beschrieben, die Rechts- und Hochwert abbilden.
Zur Beschreibung von Linien und Flächen werden in GeoJSON Array-Konstrukte verwendet. Eine Linie, in GeoJSON genannt LineString, wird durch ein Array aus Punkten dargestellt, die die einzelnen Knoten einer Linie darstellen. Eine Besonderheit ist dabei eine geschlossene Linie, ein so genannter LinearRing, bei der der Anfangs- und Endpunkt identisch sind.
Das LinearRing-Konstrukt wiederum wird zur Beschreibung von Polygonen, also Flächen, heran gezogen. Ein Polygon wird durch ein Array aus einem oder mehrerer LinearRings beschrieben. Ein LinearRing definiert dabei die Außengrenze eines Polygons. Durch weitere LinearRings können dann auch Inselflächen innerhalb eines Polygons geometrisch beschrieben werden.
Weiterhin können Features aus mehrere Geometrieobjekten bestehen. Es gibt daher MultiPoint-, MultiLineString- und MultiPolygon-Objekte, die mit einem Array aus Einzelobjekten des jeweiligen Typs dargestellt werden. Ein Anwendungsbeispiel wäre ein Gebäudekomplex, der aus mehreren einzelnen Häusern besteht, aber als ein Feature verwaltet wird.
Ein Sonderfall ist außerdem die GeometryCollection. In ihr können verschiedene Geometrietypen in einer Geometrie zusammen gefasst werden. Es handelt sich hierbei also um ein Array aus verschiedenen Geometrieobjekten.