# JSON Methods

JSON (JavaScript Object Notation) is a standard text-based format for representing structured data based on JavaScript object syntax. JavaScript provides a global `JSON` object with methods to convert between JSON strings and JavaScript objects.

## 1. `JSON.parse()`

The `JSON.parse()` method parses a JSON string, constructing the JavaScript value or object described by the string.

```javascript
const jsonString = '{"name": "Alice", "age": 25, "isAdmin": false}';
const user = JSON.parse(jsonString);

console.log(user.name); // "Alice"
console.log(user.age);  // 25
```

### The Reviver Parameter
`JSON.parse()` accepts an optional second argument, a `reviver` function, which can transform the result before it is returned.

```javascript
const jsonString = '{"name": "Alice", "birthDate": "2023-01-01T00:00:00.000Z"}';

const user = JSON.parse(jsonString, (key, value) => {
  if (key === 'birthDate') {
    return new Date(value);
  }
  return value;
});

console.log(user.birthDate.getFullYear()); // 2023
```

## 2. `JSON.stringify()`

The `JSON.stringify()` method converts a JavaScript object or value to a JSON string.

```javascript
const user = {
  name: "Bob",
  age: 30,
  isAdmin: true
};

const jsonString = JSON.stringify(user);
console.log(jsonString);
// '{"name":"Bob","age":30,"isAdmin":true}'
```

### The Replacer Parameter
The second argument is a `replacer`, which can be an array of keys to keep, or a function to alter the stringification process.

```javascript
const user = { name: "Bob", age: 30, password: "secret_password" };

// Only keep 'name' and 'age'
console.log(JSON.stringify(user, ["name", "age"]));
// '{"name":"Bob","age":30}'
```

### The Space Parameter
The third argument is `space`, used to insert white space into the output JSON string for readability (pretty-printing).

```javascript
console.log(JSON.stringify(user, null, 2));
```

[[programming/javascript/vanilla/javascript]]
[[programming/javascript/vanilla/data-types]]