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 objectJSON이 인기 있는 이유는 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);
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""
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中文网其它相关文章!
推荐阅读:
위 내용은 JSON 객체 사용 사례(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











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

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

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

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

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

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

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