> For the complete documentation index, see [llms.txt](https://mominur.gitbook.io/mominur-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mominur.gitbook.io/mominur-notes/random-topics/json.md).

# JSON

### What is JSON?

**JSON (JavaScript Object Notation)** হলো একটি lightweight data interchange format। এটি মূলত data কে store এবং transmit করার জন্য ব্যবহৃত হয়। JSON মানুষ সহজে পড়তে ও লিখতে পারে এবং machine সহজে parse ও generate করতে পারে।

***

### Why JSON?

* JSON হলো **lightweight** – XML এর মত জটিল নয়।
* **Human-readable** – সহজে বোঝা যায়।
* **Language independent** – শুধু JavaScript নয়, প্রায় সব প্রোগ্রামিং ভাষায় JSON ব্যবহার করা যায়।
* **Easy integration** – Web API, Config files, এবং Data exchange এর জন্য সবচেয়ে জনপ্রিয় format।

***

### JSON and JavaScript

JSON এর **syntax** অনেকটা JavaScript object literal এর মত।\
উদাহরণ:

```javascript
// JavaScript Object
let person = { name: "Mominur Rahman", age: 30 };

// JSON format
{
  "name": "Mominur Rahman",
  "age": 30
}
```

পার্থক্য হলো JSON এ key অবশ্যই **double quotes (" ")** এর ভিতরে থাকতে হবে।

***

### JSON Syntax Rules

1. Data হলো **name/value pairs** আকারে থাকে।

   ```json
   { "name": "Mominur Rahman" }
   ```
2. Data আলাদা করতে **comma ( , )** ব্যবহার করা হয়।
3. Curly braces `{ }` দিয়ে object define করা হয়।
4. Square brackets `[ ]` দিয়ে array define করা হয়।
5. Key অবশ্যই **string** হবে এবং double quotes এর ভিতরে থাকবে।

***

### JSON Data Types

JSON এ নিচের data type গুলো support করে:

* **String** → `"My name is Mominur Rahman"`
* **Number** → `10`, `20.5`
* **Boolean** → `true`, `false`
* **Object** → `{ "name": "Mominur", "age": 30}`
* **Array** → `[ "apple", "mango", "banana" ]`
* **null** → `null`

উদাহরণ:

```json
{
  "name": "Mominur",
  "age": 30,
  "isStudent": true,
  "hobbies": ["reading", "football", "coding"],
  "address": { "city": "Dhaka", "country": "Bangladesh" },
  "married": null
}
```

***

### Converting a JSON Text to a JavaScript Object

JavaScript এ JSON কে object এ রূপান্তর করার জন্য **JSON.parse()** ব্যবহার করা হয়।

```javascript
let jsonText = '{"name":"Mominur", "age":30}';
let obj = JSON.parse(jsonText);

console.log(obj.name); // Mominur
```

আবার JavaScript object কে JSON string এ রূপান্তর করতে **JSON.stringify()** ব্যবহার করা হয়।

```javascript
let person = { name: "Mominur", age: 30 };
let jsonString = JSON.stringify(person);

console.log(jsonString); // {"name":"Mominur","age":30}
```

***

### Others (Extra Uses of JSON)

* **Web API**: প্রায় সব REST API JSON format এ data পাঠায়।
* **Configuration Files**: অনেক সফটওয়্যার এবং framework configuration রাখে JSON এ (যেমন `package.json` in Node.js)।
* **Database**: MongoDB এর মত NoSQL database JSON এর মতো document structure ব্যবহার করে।
* **Data Storage**: Local storage বা caching এ JSON data save করা হয়।

***

## Advanced JSON Topics&#x20;

***

### JSON Schema

**JSON Schema** হলো একটা standard যেটা দিয়ে আমরা JSON data validate করতে পারি।\
অর্থাৎ, আমাদের data structure ঠিক আছে কিনা, mandatory field আছে কিনা, data type ঠিক আছে কিনা — তা পরীক্ষা করার জন্য JSON Schema ব্যবহার হয়।

```json
// JSON Schema
{
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "number" },
    "email": { "type": "string", "format": "email" }
  },
  "required": ["name", "age"]
}

// Valid JSON
{
  "name": "Rahim",
  "age": 25,
  "email": "rahim@example.com"
}

// Invalid JSON (age string হওয়ায় error হবে)
{
  "name": "Rahim",
  "age": "twenty five"
}
```

#### Real Use Case

* API endpoint এ client থেকে আসা data validation এর জন্য।
* উদাহরণ: User Registration form এ age অবশ্যই number হতে হবে।

***

### JSONPath

**JSONPath** হলো একটি query language যেটা JSON data এর ভিতর থেকে নির্দিষ্ট তথ্য বের করতে ব্যবহার করা হয়।\
এটা অনেকটা SQL query এর মত কাজ করে, তবে JSON document এর জন্য।

#### Basic Syntax of JSONPath

* `$` → Root element বোঝায়।
* `.` বা `[]` → Child element access করার জন্য।
* `*` → Wildcard (সব element match করে)।
* `[index]` → Array থেকে index select করে।
* `[start:end]` → Array থেকে slice করে।
* `?()` → Filter expression।

```json
{
  "store": {
    "book": [
      { "title": "Clean Code", "price": 20 },
      { "title": "Design Patterns", "price": 30 },
      { "title": "JavaScript Basics", "price": 15 }
    ]
  }
}
```

* সব বইয়ের title বের করতে:

  ```
  $.store.book[*].title
  ```

  Output:

  ```
  ["Clean Code", "Design Patterns", "JavaScript Basics"]
  ```
* price > 20 বই বের করতে:

  ```
  $.store.book[?(@.price > 20)].title
  ```

  Output:

  ```
  ["Design Patterns"]
  ```

#### Real Use Case

* ElasticSearch, MongoDB ইত্যাদিতে data query করতে JSONPath ব্যবহার হয়।

***

### JSON vs BSON

* **JSON** হলো text-based format।
* **BSON (Binary JSON)** হলো MongoDB তে ব্যবহৃত binary format, যেটা বেশি efficient এবং extra data type support করে।

```json
// JSON
{
  "name": "Rahim",
  "age": 25
}

// BSON (binary format, JSON এর মত দেখালেও ভিতরে binary data)
\x16\x00\x00\x00\x02name\x00\x06\x00\x00\x00Rahim\x00\x10age\x00\x19\x00\x00\x00\x00
```

#### Real Use Case

* MongoDB internally BSON format ব্যবহার করে।
* Date, ObjectId এর মত data type store করতে BSON দরকার।

***

### Streaming JSON (NDJSON / JSON Lines)

একসাথে বড় data transfer না করে, **line by line JSON object পাঠানো হয়**। এটাকে NDJSON (Newline Delimited JSON) বলা হয়।

```json
{"name":"Rahim","age":25}
{"name":"Karim","age":30}
{"name":"Hasan","age":28}
```

#### Real Use Case

* Big data, real-time log processing, data pipeline এ NDJSON ব্যবহৃত হয়।
* উদাহরণ: Apache Kafka বা Hadoop এ data stream করার সময়।

***

### JSON Patch & JSON Merge Patch

* **JSON Patch (RFC 6902)** → JSON document update করার জন্য step-by-step instruction define করে।
* **JSON Merge Patch (RFC 7396)** → সহজভাবে object merge করার জন্য ব্যবহৃত হয়।

```json
// Original JSON
{
  "name": "Rahim",
  "age": 25
}

// JSON Patch
[
  { "op": "replace", "path": "/name", "value": "Karim" },
  { "op": "add", "path": "/city", "value": "Dhaka" }
]

// Result
{
  "name": "Karim",
  "age": 25,
  "city": "Dhaka"
}
```

#### Real Use Case

* API (HTTP PATCH request) এ data update করতে ব্যবহার হয়।
* উদাহরণ: শুধু user এর নাম change করা, পুরো record replace না করে।

***

### JSON Performance & Compression

বড় JSON ফাইল দ্রুত পাঠানোর জন্য compression ব্যবহার হয়। সাধারণত `GZIP` compression ব্যবহৃত হয়।

#### Real Use Case

* REST API response এ:

  ```
  Content-Encoding: gzip
  ```
* JSON size 1MB হলে compression এর পর সেটা 200KB হতে পারে।
