Kori 6월 30일, 2022에 포스트됨 공유하기 6월 30일, 2022에 포스트됨 Docwiki에 있는 "JSON"을 번역한 글: 번역일: 2022년 6월 30일) 위로 가기: Using the RTL in Multi-Device Applications JSON(JavaScript Object Notation)은 언어에 종속적이지 않고 가벼운 데이터-교환 형식이다. JSON은 XML이나 YAML과 같은 다른 데이터-교환 형식의 대안으로 사용될 수 있다. RAD 스튜디오에는 JSON 프레임워크(들)이 있고 각 프레임워크에는 JSON 형식으로 된 데이터를 저장, 해독(Parse), 읽기, 쓰기, 생성을 담당하는 여러가지 클래스와 메소드가 들어있다. 목차 1 JSON 프레임워크(들) 1.1 JSON Object 프레임워크 1.2 Readers and Writers JSON 프레임워크 2 RAD 스튜디오에서 제공하는 JSON 프레임워크들 사이의 다른 점 3 JSON 처리(process)와 해독(parse): 10.3 버전에서 향상됨 4 JSON 주제 5 기타 자료 (See Also) 5.1 코드 예제(Sample) 1 JSON 프레임워크(들) RAD 스튜디오에서 JSON 데이터를 다루는 프레임워크는 몇가지가 있다. JSON Object 프레임워크: 이 프레임워크는 임시 오브젝트(들)을 생성하여 JSON 데이터를 읽고 쓴다. Readers and Writers JSON 프레임워크: 이 프레임워크는 JSON 데이터를 직접 읽고 쓸 수 있다. 1.1 JSON Object 프레임워크 이 JSON Object 프레임워크를 사용하면, 임시 오브젝트를 만들어서 JSON 데이터를 만들거나 해독(Parse)해야 한다. 즉, TJSONObject, TJSONArray, TJSONString와 같은 중간 매개자 역할을 하는 오브젝트를 메모리에 먼저 생성하고 나서 JSON 읽기와 쓰기를 하도록 되어 있다. 이 프레임워크에 대한 보다 자세한 내용은 JSON Objects Framework를 참고 1.2 Readers and Writers JSON 프레임워크 이 Readers and Writers JSON 프레임워크는 JSON 데이터를 스트림(stream)에서 직접 읽고 쓸 수 있으며, 임시 오브젝트를 만들지 않는다. 임시 오브젝트를 만들어서 JSON을 읽고 쓰는 방식이 아니므로, 성능과 메모리 사용면에서 더 좋다. "JSON Object 프레임워크"와 달리 "Readers and Writers JSON 프레임워크"는 BSON을 지원한다. 이 프레임워크에 대한 보다 자세한 내용은 Readers and Writers JSON Framework를 참고 2 RAD 스튜디오에서 제공하는 JSON 프레임워크들 사이의 다른 점 JSON 데이터를 가지고 작업을 할 때 이 두 프레임워크 중 어느 것을 사용해도 된다. 프로젝트의 요구에 더 잘 맞는 것을 선택하게 될 것이다. 아래 표에는 이 두 JSON 프레임워크 사이의 중요한 차이점 몇가지가 정리되어 있다. JSON Object 프레임워크 JSON 구조를 읽기가 더 쉽고, 반복(iteration)과 변경을 해당 모델 트리 안에서 수행할 수 있다. Readers and Writers JSON 프레임워크 스트림 안에 있는 JSON을 순차적으로 읽고 쓴다. 따라서 메모리를 더 적게 사용한다. BSON 지원 확장가능(Extensible) 아래 표는 동일한 JSON "쓰기"를 각 프레임워크에서 어떻게 코딩하는 지를 비교한다. JSON 쓰기 비교표 JSON Object 프레임워크 Readers and Writers JSON 프레임워크 TJSonWriter Readers and Writers JSON 프레임워크 TJSONObjectBuilder JSONColor := TJSONObject.Create; JSONColor.AddPair('name', '빨강'); JSONColor.AddPair('hex', '#f00'); JSONArray := TJSONArray.Create; JSONArray.Add(JSONColor); JSONObject := TJSONObject.Create; JSONObject.AddPair('colors', JSONArray); Writer.WriteStartObject; Writer.WritePropertyName('colors'); Writer.WriteStartArray; Writer.WriteStartObject; Writer.WritePropertyName('name'); Writer.WriteValue('빨강'); Writer.WritePropertyName('hex'); Writer.WriteValue('#f00'); Writer.WriteEndObject; Writer.WriteEndArray; Writer.WriteEndObject; Builder := TJSONObjectBuilder.Create(Writer); Builder .BeginObject .BeginArray('colors') .BeginObject .Add('name', '빨강') .Add('hex', '#f00') .EndObject .EndArray .EndObject; 위 표에 있는 코드 3개가 쓴 결과 JSON은 모두 아래와 같이 동일하다. { "colors":[ { "name":"빨강", "hex":"#f00" } ] } 아래 표는 동일한 JSON "읽기"를 각 프레임워크에서 어떻게 코딩하는 지를 비교한다. JSON 읽기 비교표 JSON Object 프레임워크 Readers and Writers JSON 프레임워크 TJsonReader Readers and Writers JSON 프레임워크 TJSONIterator JSONValue := TJSONObject.ParseJSONValue( '{"colors":[{"name":"빨강", "hex":"#f00"}]}'); Memo1.Lines.Add('READER:'); if JSONValue is TJSONArray then //... else if JSONVAlue is TJSONObject then Memo1.Lines.Add('colors'); Memo1.Lines.Add('name: '+ JSONValue.GetValue<string>('colors[0].name')); Memo1.Lines.Add('hex: '+ JSONValue.GetValue<string>('colors[0].hex')); LStringReader := TStringReader.Create( '{"colors":[{"name":"빨강", "hex":"#f00"}]}'); LJsonTextReader := TJsonTextReader.Create(LStringReader); while LJsonTextReader.read do case LJsonTextReader.TokenType of TJsonToken.PropertyName: Memo1.Lines.Add(LJsonTextReader.Value.AsString); TJsonToken.String: Memo1.Lines[Memo1.Lines.Count-1] := Memo1.Lines[Memo1.Lines.Count-1] + ': ' + LJsonTextReader.Value.AsString; end; LStringReader := TStringReader.Create( '{"colors":[{"name":"빨강", "hex":"#f00"}]}'); LJsonTextReader := TJsonTextReader.Create(LStringReader); LIterator := TJSONIterator.Create(LJsonTextReader); LIterator.Recurse; LIterator.Next; Memo1.Lines.Add(LIterator.Key); LIterator.Recurse; LIterator.Recurse; LIterator.Next; LIterator.Recurse; LIterator.Next; Memo1.Lines.Add(LIterator.Key +': '+ LIterator.AsString); LIterator.Next; Memo1.Lines.Add(LIterator.Key +': '+ LIterator.AsString); 위 표에 있는 코드 3개가 데이터를 읽어서 TMemo에 넣은 결과는 모두 아래와 같이 동일하다. colors name: 빨강 hex: #f00 3 JSON 처리(process)와 해독(parse): 10.3 버전에서 향상됨 JSON 코드의 정확성 향상: 즉, TJSONValue 클래스와 그 자손 클래스가 생성하는 JSON 코드 측면과 해독 측면에서 향상되었다. 성능 또한 향상되었다. TAsciiStreamWriter 클래스가 새로 추가됨: 이 클래스는 TJsonTextWriter와 함께 사용할 수 있으며 JSON 문자열을 생성할 때 성능을 가장 좋게 할 수 있다 (변환을 더 줄일 수 있기 때문). JSON 출력이 "더 보기 좋게 출력"되도록 새로 TJSONAncestor.Format(Indentation: Integer = 4)이 도입되었다. 그 결과 TJSON.Format은 더이상 사용되지 않는다. TJSONAncestor.ToJSON은 항상 형식적으로 유효한 JSON 문자열을 생산한다. TJSONAncestor.ToString도 비슷한 JSON 문자열을 만들긴 하지만 ASCII가 아닌 심볼(symbol)을 \uNNNN로 변환하지 않기 때문에 더 빠르지만 형식적으로 유효하지 않은 JSON을 생산하게 될 수 있다. JSON 해독(parsing) 지원 시 새로운 동작이 추가되어서, 이제는 원본 JSON 텍스트에 오류가 있는 경우에 할 수 있는 선택이 하나 더 생겼다. TJSONObject.TJSONParseOption.RaiseExc: 이것은 ParseJSONValue 메소드가 EJSONParseException 타입 예외(exception)를 발생시킬 것인지 아니면, (예전과 같이) nil을 반환할 것인지를 결정한다. 만약 이 옵션을 켜면 반환값은 해당 에러의 위치가 되고, 이번에 새로 추가된 System.JSON.EJSONParseException(여기에는 Path, Offset, Line, Position 프로퍼티들이 들어있다)을 발생시킨다. 추가로, 이 TJSONObject.ParseJSONValue 메소드에는 세번째 파라미터 즉 RaiseExc가 새로 생겼다. 이 옵션은 JSON 해독 에러 발생 시 예외(exception)을 발생 여부를 지정해놓은 글로벌 설정을 덮어쓴다. 4 JSON 주제 JSON 프레임워크: JSON Objects Framework Readers and Writers JSON Framework BSON 5 기타 자료 (See Also) System.JSON System.JSON.Builders System.JSON.Writers System.JSON.Readers System.JSON.BSON 5.1 코드 예제(Sample) RTL.JSON Iterator 코드 조각 RTL.JSON Reader 코드 조각 RTL.JSON Builder 코드 조각 RTL.JSON Writer 코드 조각 RTL.JSON Workbench 예문 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.