표 형식의 데이터를 JSON으로 어떻게 표현해야 합니까?
JDBC에 연결된 Java Servlet에서 JSON을 통해 데이터를 불러오기 위한 API를 작성하고 있습니다.JSON을 선택한 이유는 브라우저의 데이터에 대해 정렬 및 기타 작업을 수행하고 여러 도메인에서 데이터에 액세스하기 때문입니다.
기본적으로 JavaScript에서 SQL 쿼리를 수행하므로 반환되는 데이터는 기본적으로 표 형식입니다.예를 들어 다음과 같이 열 레이블의 목록을 가져오고 값 배열이 돌아오도록 이 글을 쓰기 시작했습니다.
{
"columns": [
"given_name",
"surname",
],
"results": [
[
"Joe",
"Schmoe"
],
[
"Jane",
"Doe"
]
]
}
그러나 반환된 데이터를 처리하기 위해 JavaScript를 작성하기 시작하면서 다음과 같은 키/값 쌍으로 결과를 출력하는 것이 더 나을지 의문입니다.
{
"results": [
{
"given_name": "Joe",
"surname": "Schmoe"
},
{
"given_name": "Jane",
"surname" : "Doe"
}
]
}
많은 결과를 반환하는 경우 반복되는 텍스트가 많습니다.하지만 gzip을 전송할 예정이기 때문에 대역폭에 대해서는 크게 염려하지 않습니다.
기본적으로 데이터를 액세스하기 위해 이 기능을 설계해야 합니까?
$.getJSON(query, function(data) {
var columns = data.columns;
var results = data.results;
$.each(results, function(key, row) {
console.log(row[columns.indexOf('surname')]);
});
});
아니면 훨씬 더 예쁜
$.getJSON(query, function(data) {
var results = data.results;
$.each(results, function(key, row) {
console.log(row.surname);
});
});
?
기본적으로 퍼포먼스에 대한 잠재적인 히트가 후자 옵션의 훨씬 더 깨끗한 구문을 정당화하는지 알고 싶습니다.
따르다
나는 그것을 실행하는 방법과 프로파일링 모두 했다.프로파일링 정말 좋은 생각이었어!실적의 차이는 미미했다.데이터 전송 사이즈의 차이는 컸지만, Gzip 압축에서는 양쪽 형식과 매우 큰 데이터 세트와 매우 작은 데이터 세트 간에 차이가 5~6%로 감소했습니다.그래서 저는 더 예쁜 구현으로 하겠습니다.이 어플리케이션에서는 모든 클라이언트가 Gzip/Deflate를 지원하므로 크기는 중요하지 않으며 클라이언트와 서버 모두 계산 복잡도가 비슷하여 문제가 되지 않습니다.
관심 있는 분들을 위해 그래프와 함께 제 데이터를 보내드립니다!
둘 다 프로파일.그 후 최적화.
기타 답변 종합:
- 와이어 형식이 메모리 내 형식과 같을 필요는 없습니다.
- 어느 쪽이 더 나은 프로파일 - 차이가 있는지 확인합니다.
- 처음에는 단순한 것이 좋습니다.
상세:
- 결과 페이지만 있고 사용자가 적은 경우 두 번째 형식은 첫 번째 형식과 다를 바 없습니다.
- 데이터가 매우 희박한 경우에는 두 번째 형식이 더 나을 수 있습니다.
- 1000개 이상의 데이터를 전송하고 수백만 명의 사용자가 있는 경우 전송되는 데이터의 크기가 중요해지고 첫 번째 형식이 도움이 될 수 있습니다.
- 모든 사용자 에이전트가 gzip/deflate를 지원한다고 보장할 수는 없으므로 유의하십시오.
또 하나의 JSON 구조에서 매우 좋은 결과를 얻었습니다.
{
"recordCount": 2,
"data": {
"Id": [1, 2],
"Title": ["First record", "Second record"],
"Value": [18192, 18176]
}
}
모든 데이터 통과:
for (var i = 0; i < recordSet.recordCount; ++i) {
console.log("Record " + i.toString() + ":");
for (var field in recordSet.data)
console.log("\t" + field + ": " + recordSet.data[field][i].toString());
}
코드를 보다 콤팩트하고 번거로운 포맷으로 묶을 필요가 없습니다.에 JS가 합니다.columns
만약 그것이 없다면, 당신은 단순한 배열의 물체를 다루고 있는 것입니다.있으면 번거로운 포맷을 보다 편리한 포맷으로 쉽게 매핑할 수 있습니다.
WWIW 저는 두 번째 옵션으로 하겠습니다.여러분이 관찰한 바와 같이 더 깨끗한 JavaScript에 적합하며, 또한 인간이 읽고 이해하는 것도 더 쉬워집니다.옵션 1에서 얻을 수 있는 작은 성능보다 가독성이 우선합니다.
또한 언젠가 열을 추가하거나 열의 순서를 바꾸게 되면 첫 번째 옵션을 사용하면 응답 데이터의 위치에 따라 작업하기 때문에 JavaScript를 많이 다시 작성해야 할 것입니다.
첫 번째 옵션을 언제든지 JSON 표현으로 변환할 수 있습니다.
const tabularDataToJSON = (rows: string[][], columns: { value: string }[]) => {
return rows.map(function (row) {
const record: Record<string, string> = {}
columns.forEach((col, index) => {
record[col.value] = row[index]
})
return record
})}
const json = tabularDataToJSON(results, columns)
언급URL : https://stackoverflow.com/questions/5863304/how-should-i-represent-tabular-data-in-json
'programing' 카테고리의 다른 글
워드프레스 메뉴에 단축코드를 삽입하는 방법 (0) | 2023.03.17 |
---|---|
HTTP 요청에 Axios와 jQuery를 사용할 때의 차이점은 무엇입니까? (0) | 2023.03.17 |
Oracle 값 목록에서 선택하는 방법 (0) | 2023.03.17 |
JSON.stringify가 삭제하지 않은 미정의 보존 (0) | 2023.03.17 |
Typescript를 사용하여 Express Request 개체 확장 (0) | 2023.03.17 |