웹 프론트엔드 JS 튜토리얼 JSON 객체 사용 사례(코드 포함)

JSON 객체 사용 사례(코드 포함)

Apr 24, 2018 pm 05:15 PM
javascript json 암호

이번에는 JSON 객체 사용 사례(코드 포함)를 가져왔습니다. JSON 객체 사용 시 주의 사항은 무엇인가요? 다음은 실제 사례입니다.

앞의 말

 json(javascript object notation)의 전체 이름은 javascript objectnotation입니다. 구조화된 데이터를 읽는 데 사용되는 프로그래밍 언어가 아닌 데이터 교환을 위한 텍스트 형식입니다. 2001년 Douglas Crockford가 번거롭고 번거로운 XML 형식을 대체할 목적으로 제안했습니다. 이번 글에서는 json의 내용을 자세히 소개하겠습니다

문법 규칙

JSON의 구문은 다음 세 가지 유형의 값을 나타낼 수 있습니다 ​​

[1] 단순 값 ​​

단순 값은 동일한 값을 사용합니다 구문은 JavaScript로 작성되며 JSON 문자열, 숫자 값, 불리언 값 및 null로 표현할 수 있습니다.

문자열은 큰따옴표로 표시해야 하며 작은따옴표는 사용할 수 없습니다. 값은 10진수로 표현해야 하며 NaN, Infinity는 사용할 수 없습니다. [참고] JSON은 키-값 쌍에 정의되지 않은 특수 값을 지원하지 않습니다. 각 키-값 쌍의 값은 단순한 값일 수도 있고 복잡한 데이터 유형의 값일 수도 있습니다

JavaScript 객체 리터럴과 비교할 때 json에는 세 가지 차이점이 있습니다

 1. JSON에는 변수 개념이 없습니다

 2. JSON에서는, 객체의 키 이름은 큰따옴표로 묶어야 합니다

 3. JSON은 자바스크립트 구문이 아니기 때문에 끝에 세미콜론이 없습니다

 [참고] 동일한 이름을 가진 두 개의 속성이 동일한 객체에 나타나면 안 됩니다

//合格的简单值
5
"hello world"
true
null
로그인 후 복사
//不合格的简单值
+0x1
'hello world'
undefined
NaN
Infinity
로그인 후 복사

【3】Array

 Array는 또한 숫자 인덱스를 통해 액세스할 수 있는 값의 정렬된 목록 집합을 나타내는 복잡한 데이터 유형입니다. 배열의 값은 간단한 값, 객체 또는 배열 등 모든 유형이 될 수 있습니다.

 JSON 배열에는 변수와 세미콜론이 없습니다. 배열과 객체를 결합하면 더 복잡한 데이터 컬렉션이 형성될 수 있습니다

 [참고] 배열 또는 배열의 마지막 단계입니다. object 멤버 뒤에는 쉼표를 추가할 수 없습니다

JSON object

JSON이 인기 있는 이유는 JSON 데이터 구조를 유용한 JavaScript 개체로 구문 분석할 수 있기 때문입니다

ECMAScript5는 JSON 구문 분석 동작을 표준화하고 전역 객체를 정의합니다. 객체 JSON [참고] IE7 브라우저는 지원하지 않습니다

 JSON 객체에는 stringify()와 Parse()라는 두 가지 메소드가 있습니다. 이 두 메서드는 JavaScript

객체

를 JSON 문자열로 직렬화하고 JSON 문자열을 기본 JavaScript 값

stringify()

 JSON.stringify() 메서드는 값을 문자열로 변환하는 데 사용됩니다. 문자열은 JSON 형식을 준수해야 하며 JSON.parse() 메서드로 복원할 수 있습니다. 기본적으로 JSON.stringify()의 JSON 문자열 출력에는 공백 문자나 들여쓰기가 포함되지 않습니다.

//合格的对象
{
  "name":"huochai",
  "age":29,
  "school":{
    "name":"diankeyuan",
    "location":"beijing"
  }
}
로그인 후 복사

특정 변환

//不合格的对象
{ name: "张三", 'age': 32 }//属性名必须使用双引号
{};//不需要末尾的分号
{ "birthday": new Date('Fri, 26 Aug 2011 07:13:10 GMT'),
 "getName": function() {
   return this.name;
 }
} // 不能使用函数和日期对象
로그인 후 복사

 stringify() 메소드는

정규식

및 수학 객체를 빈 객체의 문자열 형식으로 변환합니다

var jsonObj = {
  "title":"javascript",
  "group":{
    "name":"jia",
    "tel":12345
  }
};
//{"title":"javascript","group":{"name":"jia","tel":12345}}
JSON.stringify(jsonObj);
로그인 후 복사
 stringify() 메소드는 날짜 객체 및 래퍼 객체를 문자열로 변환합니다

JSON.stringify('abc') // ""abc""
JSON.stringify(1) // "1"
JSON.stringify(false) // "false"
JSON.stringify([]) // "[]"
JSON.stringify({}) // "{}"
JSON.stringify([1, "false", false])// '[1,"false",false]'
JSON.stringify({ name: "张三" })// '{"name":"张三"}'
로그인 후 복사

객체의 멤버가 정의되지 않거나 함수, 이 멤버는 생략됩니다 배열의 멤버가 정의되지 않거나 함수인 경우 이 값은 null로 변환됩니다

JSON.stringify(/foo/) // "{}"
JSON.stringify(Math) // "{}"
로그인 후 복사

 JSON.stringify() 메서드는 객체의 탐색 불가능한 속성을 무시합니다.

JSON.stringify(new Boolean(true)) //"true"
JSON.stringify(new String('123')) //""123""
JSON.stringify(new Number(1)) //"1"
JSON.stringify(new Date()) //""2016-09-20T02:26:38.294Z""
로그인 후 복사

Parameters

 JSON 직렬화할 JavaScript 개체 외에도 .stringify()는 JavaScript 개체를 직렬화하는 다양한 방법을 지정하는 데 사용되는 두 개의 다른 매개 변수도 받을 수 있습니다. 첫 번째 매개변수는 배열 또는 함수일 수 있는 필터입니다. 두 번째 매개변수는 JSON 문자열에서 들여쓰기를 유지할지 여부를 나타내는 옵션입니다.

【Array Filter】 때 stringify() 메소드는 배열이므로 필터 기능을 구현하는 것과 같습니다

  【1】过滤器只对对象的第一层属性有效

var jsonObj = {
  "title":"javascript",
  "group":{
    "a":1
  }
};
//{"group":{"a":1}}
console.log(JSON.stringify(jsonObj,["group","a"]))
로그인 후 복사

  【2】过滤器对数组无效

var jsonObj =[1,2];
JSON.stringify(jsonObj,["0"])//"[1,2]"
로그인 후 복사

函数参数

  stringify()方法的第二个参数也可以是一个函数。传入的函数接收两个参数,属性(键)名和属性值

JSON.stringify({a:1,b:2}, function(key, value){
 if (typeof value === "number") {
  value = 2 * value;
 }
 return value;  
})
// "{"a":2,"b":4}"
로그인 후 복사

  属性名只能是字符串,而在值并非键值对儿结构的值时,键名可以是空字符串

  这个函数参数会递归处理所有的键

  下面代码中,对象o一共会被f函数处理三次。第一次键名为空,键值是整个对象o;第二次键名为a,键值是{b:1};第三次键名为b,键值为1

JSON.stringify({a: {b: 1}}, function (key, value) {
 console.log("["+ key +"]:" + value);
 return value;
})
// []:[object Object]
// [a]:[object Object]
// [b]:1
// '{"a":{"b":1}}'
로그인 후 복사

  函数返回的值就是相应键的值。如果函数返回了undefined或没有返回值,那么相应的属性会被忽略

JSON.stringify({ a: "abc", b: 123 }, function (key, value) {
 if (typeof(value) === "string") {
  return undefined;
 }
 return value;
})
// '{"b": 123}'
로그인 후 복사

【缩进】

  stringify()方法还可以接受第三个参数,用于增加返回的JSON字符串的可读性

  如果是数字,表示每个属性前面添加的空格(最多不超过10个)

  如果是字符串(不超过10个字符),则该字符串会添加在每行前面

/*"{
 "p1": 1,
 "p2": 2
}"*/
JSON.stringify({ p1: 1, p2: 2 }, null, 2);
//"{"p1":1,"p2":2}"
JSON.stringify({ p1: 1, p2: 2 }, null, 0);
/*"{
|-"p1": 1,
|-"p2": 2
}"*/
JSON.stringify({ p1:1, p2:2 }, null, '|-');
toJSON()
로그인 후 복사

  有时候,JSON.stringify()还是不能满足对某些对象进行自定义序列化的需求。在这些情况下, 可以通过对象上调用toJSON()方法,返回其自身的JSON数据格式

JSON.stringify({
 toJSON: function () {
  return "Cool"
 }
})
// ""Cool""
로그인 후 복사
var o = {
 foo: 'foo',
 toJSON: function() {
  return 'bar';
 }
};
JSON.stringify({x: o});// '{"x":"bar"}'
로그인 후 복사

  如果toJSON()方法返回undefined,此时如果包含它的对象嵌入在另一个对象中,会导致该对象的值变成null。而如果包含它的对象是顶级对象,结果就是undefined

JSON.stringify({
 toJSON: function () {
  return undefined
 }
})
//undefined
로그인 후 복사

  Date对象部署了一个自己的toJSON方法,自动将Date对象转换成日期字符串

JSON.stringify(new Date("2016-08-29"))
// "2016-08-29T00:00:00.000Z"
로그인 후 복사

  toJSON方法的一个应用是,可以将正则对象自动转为字符串

RegExp.prototype.toJSON =RegExp.prototype.toString;
JSON.stringify(/foo/)// ""/foo/""
로그인 후 복사

  toJSON()可以作为函数过滤器的补充,因此理解序列化的内部顺序十分重要。假设把一个对象传入JSON.stringify(),序列化该对象的顺序如下

  1、如果存在toJSON()方法而且能通过它取得有效的值,则调用该方法。否则,按默认顺序执行序列化

  2、如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第一步返回的值

  3、对第二步返回的每个值进行相应的序列化

  4、如果提供了第三个参数,执行相应的格式化

parse()

  JSON.parse方法用于将JSON字符串转化成对象

JSON.parse('{}') // {}
JSON.parse('true') // true
JSON.parse('"foo"') // "foo"
JSON.parse('[1, 5, "false"]') // [1, 5, "false"]
JSON.parse('null') // null
var o = JSON.parse('{"name": "张三"}');
o.name // 张三
로그인 후 복사

  如果传入的字符串不是有效的JSON格式,JSON.parse方法将报错

//Uncaught SyntaxError: Unexpected token u in JSON at position 0(…)JSON.parse("'String'")
//Uncaught SyntaxError: Unexpected token u in JSON at position 0(…)JSON.parse("undefined")
로그인 후 복사

  JSON.parse()方法也可以接收一个函数参数,在每个键值对儿上调用,这个函数被称为还原函数(reviver)。该函数接收两个参数,一个键和一个值,返回一个值

  如果还原函数返回undefined,则表示要从结果中删除相应的键;如果返回其他值,则将该值插入到结果中

var o = JSON.parse('{"a":1,"b":2}', function(key, value) {
 if (key === ''){
  return value;
 }
 if (key === 'a') {
  return value + 10;
 }
});
o.a // 11
o.b // undefinef
로그인 후 복사

  在将日期字符串转换为Date对象时,经常要用到还原函数

var book = {
  "title": "javascript",
  "date": new Date(2016,9,1)
}
var jsonStr = JSON.stringify(book);
//'{"title":"javascript","date":"2016-09-30T16:00:00.000Z"}''
console.log(jsonStr)
var bookCopy = JSON.parse(jsonStr,function(key,value){
  if(key == 'date'){
    return new Date(value);
  }
  return value;
})
console.log(bookCopy.date.getFullYear());//2016
로그인 후 복사

eval()

  实际上,eval()类似于JSON.parse()方法,可以将json字符串转换为json对象

eval('(' + '{"a":1}'+')').a;//1
JSON.parse('{"a":1}').a;//1
로그인 후 복사

  但是,eval()可以执行不符合JSON格式的代码,有可能会包含恶意代码

eval('(' + '{"a":alert(1)}'+')').a;//弹出1
JSON.parse('{"a":alert(1)}').a;//报错
로그인 후 복사

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

jquery中ajax执行顺序调整

Ajax与$.ajax实例详解

위 내용은 JSON 객체 사용 사례(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

모든 장치에서 GE 범용 원격 코드 프로그램 모든 장치에서 GE 범용 원격 코드 프로그램 Mar 02, 2024 pm 01:58 PM

장치를 원격으로 프로그래밍해야 하는 경우 이 문서가 도움이 될 것입니다. 우리는 모든 장치 프로그래밍을 위한 최고의 GE 범용 원격 코드를 공유할 것입니다. GE 리모콘이란 무엇입니까? GEUniversalRemote는 스마트 TV, LG, Vizio, Sony, Blu-ray, DVD, DVR, Roku, AppleTV, 스트리밍 미디어 플레이어 등과 같은 여러 장치를 제어하는 ​​데 사용할 수 있는 리모컨입니다. GEUniversal 리모컨은 다양한 기능과 기능을 갖춘 다양한 모델로 제공됩니다. GEUniversalRemote는 최대 4개의 장치를 제어할 수 있습니다. 모든 장치에서 프로그래밍할 수 있는 최고의 범용 원격 코드 GE 리모컨에는 다양한 장치에서 작동할 수 있는 코드 세트가 함께 제공됩니다. 당신은 할 수있다

PHP 배열을 JSON으로 변환하기 위한 성능 최적화 팁 PHP 배열을 JSON으로 변환하기 위한 성능 최적화 팁 May 04, 2024 pm 06:15 PM

PHP 배열을 JSON으로 변환하기 위한 성능 최적화 방법은 다음과 같습니다. JSON 확장 및 json_encode() 함수를 사용하여 문자 이스케이프를 방지하고 버퍼를 사용하여 JSON 인코딩 결과 캐싱을 고려합니다. JSON 인코딩 라이브러리.

Jackson 라이브러리의 주석은 JSON 직렬화 및 역직렬화를 어떻게 제어합니까? Jackson 라이브러리의 주석은 JSON 직렬화 및 역직렬화를 어떻게 제어합니까? May 06, 2024 pm 10:09 PM

Jackson 라이브러리의 주석은 JSON 직렬화 및 역직렬화를 제어합니다. 직렬화: @JsonIgnore: 속성 무시 @JsonProperty: 이름 지정 @JsonGetter: get 메서드 사용 @JsonSetter: set 메서드 사용 역직렬화: @JsonIgnoreProperties: @JsonProperty 속성 무시: 이름 지정 @JsonCreator: 생성자 사용 @JsonDeserialize: 사용자 정의 논리

Copilot을 사용하여 코드를 생성하는 방법 Copilot을 사용하여 코드를 생성하는 방법 Mar 23, 2024 am 10:41 AM

프로그래머로서 저는 코딩 경험을 단순화하는 도구에 흥미를 느낍니다. 인공 지능 도구의 도움으로 데모 코드를 생성하고 요구 사항에 따라 필요한 수정 작업을 수행할 수 있습니다. Visual Studio Code에 새로 도입된 Copilot 도구를 사용하면 자연어 채팅 상호 작용을 통해 AI 생성 코드를 만들 수 있습니다. 기능을 설명함으로써 기존 코드의 의미를 더 잘 이해할 수 있습니다. Copilot을 사용하여 코드를 생성하는 방법은 무엇입니까? 시작하려면 먼저 최신 PowerPlatformTools 확장을 가져와야 합니다. 이를 위해서는 확장 페이지로 이동하여 "PowerPlatformTool"을 검색하고 설치 버튼을 클릭해야 합니다.

Linux '.a' 파일 생성 및 실행 Linux '.a' 파일 생성 및 실행 Mar 20, 2024 pm 04:46 PM

Linux 운영 체제에서 파일을 작업하려면 개발자가 파일, 코드, 프로그램, 스크립트 및 기타 항목을 효율적으로 생성하고 실행할 수 있도록 하는 다양한 명령과 기술을 사용해야 합니다. Linux 환경에서는 확장자가 ".a"인 파일이 정적 라이브러리로서 매우 중요합니다. 이러한 라이브러리는 소프트웨어 개발에서 중요한 역할을 수행하므로 개발자는 여러 프로그램에서 공통 기능을 효율적으로 관리하고 공유할 수 있습니다. Linux 환경에서 효과적인 소프트웨어 개발을 위해서는 ".a" 파일을 생성하고 실행하는 방법을 이해하는 것이 중요합니다. 이번 글에서는 리눅스 ".a" 파일을 포괄적으로 설치하고 구성하는 방법을 소개한다. 리눅스 ".a" 파일의 정의, 목적, 구조, 생성 및 실행 방법을 살펴보자. L은 무엇입니까?

칭화대학교와 Zhipu AI 오픈 소스 GLM-4: 자연어 처리의 새로운 혁명 시작 칭화대학교와 Zhipu AI 오픈 소스 GLM-4: 자연어 처리의 새로운 혁명 시작 Jun 12, 2024 pm 08:38 PM

2023년 3월 14일 ChatGLM-6B가 출시된 이후 GLM 시리즈 모델은 광범위한 관심과 인정을 받았습니다. 특히 ChatGLM3-6B가 오픈소스로 공개된 이후 개발자들은 Zhipu AI가 출시하는 4세대 모델에 대한 기대감이 가득합니다. 이러한 기대는 마침내 GLM-4-9B의 출시로 완전히 충족되었습니다. GLM-4-9B의 탄생 소형 모델(10B 이하)에 더욱 강력한 기능을 제공하기 위해 GLM 기술팀은 약 반년 만에 새로운 4세대 GLM 시리즈 오픈 소스 모델인 GLM-4-9B를 출시했습니다. 탐구. 이 모델은 정확성을 보장하면서 모델 크기를 크게 압축하고 추론 속도가 더 빠르고 효율성이 높습니다. GLM 기술팀의 탐색은 아직 이루어지지 않았습니다.

한 문장으로 Agent를 만들어보세요! 로빈 리: 모두가 개발자가 되는 시대가 온다 한 문장으로 Agent를 만들어보세요! 로빈 리: 모두가 개발자가 되는 시대가 온다 Apr 17, 2024 pm 02:28 PM

빅 모델은 모든 것을 전복시키고 마침내 이 편집장의 머리에 닿았습니다. 단 한 문장으로 만들어진 Agent이기도 합니다. 이렇게 그에게 기사를 주면 1초도 안 되어 새로운 제목 제안이 나올 것이다. 나에 비하면 이 효율성은 번개만큼 빠르고 나무늘보만큼 느리다고밖에 할 수 없다... 더욱 놀라운 것은 이 에이전트를 만드는 데 정말 몇 분밖에 걸리지 않는다는 것이다. 프롬프트는 Jiang 아줌마의 것입니다. 그리고 이 파괴적인 느낌을 경험하고 싶다면 이제 Baidu가 출시한 새로운 Wenxin 지능형 플랫폼을 기반으로 누구나 자신만의 지능형 비서를 무료로 만들 수 있습니다. 검색 엔진, 스마트 하드웨어 플랫폼, 음성 인식, 지도, 자동차 및 기타 Baidu 모바일 생태 채널을 사용하여 더 많은 사람들이 창의력을 발휘할 수 있습니다! 로빈 리 그 자체

PHP에 대한 심층적인 이해: JSON 유니코드를 중국어로 변환하는 구현 방법 PHP에 대한 심층적인 이해: JSON 유니코드를 중국어로 변환하는 구현 방법 Mar 05, 2024 pm 02:48 PM

PHP에 대한 심층적인 이해: JSONUnicode를 중국어로 변환하는 구현 방법 개발 중에 JSON 데이터를 처리해야 하는 상황이 자주 발생하며, JSON의 유니코드 인코딩은 일부 시나리오, 특히 변환해야 할 때 몇 가지 문제를 일으킬 수 있습니다. 유니코드 인코딩을 한자로 변환하는 경우입니다. PHP에는 이러한 변환 프로세스를 달성하는 데 도움이 되는 몇 가지 방법이 아래에 소개되고 구체적인 코드 예제가 제공됩니다. 먼저 JSON의 Un을 먼저 이해해 봅시다.

See all articles