JavaScript + MariaDB : json 객체의 배열을 반환하고 응답에서`\`슬래시를 제거하는 SQL 쿼리

어두운

자바 스크립트 함수의 SQL (mariaDB) 테이블에 원시 쿼리를 적용하고 있습니다.

::: 업데이트 된 질문 :::

아래는 답변에서 제안한대로 JSON_ARRAYJSON_OBJECT메서드를 사용해도 시도한 SQL 쿼리를 만드는 자바 스크립트 함수 입니다.

public async getProducts() {
  try {
  let productTbl = '`products`';
  let prodImgTbl = '`product_images_ids`';
  let productImg = '`product_images`';

  let query = `SELECT 
  ${productTbl}.id AS productId,
  GROUP_CONCAT(JSON_ARRAY(JSON_OBJECT(
    "imageId", ${prodImgTbl}.id, 
    "imageUrl", ${productImg}.thumbnail_image
  ))) imageData,

  FROM ${productTbl} 
  JOIN ${prodImgTbl} ON ${prodImgTbl}.product_id = ${productTbl}.id
  JOIN ${productImg} ON ${productImg}.id = ${prodImgTbl}.product_image_id
  GROUP BY ${productTbl}.id `

  let records = await pool.query(query);
  return records
  } catch (error) {
  throw error;
  }
}

이 쿼리를 사용 \하여 각 키와 값에를 추가하는 우편 배달부에서 결과를 얻습니다 .

this.productList = [
  {
    "productId": 3,
    "imageData": "[{\"imageId\": 17, \"imageUrl\": \"/assets/images/321/1/1/1/image.jpg\"}],[{\"imageId\": 18, \"imageUrl\": \"/assets/images/322/image.jpg\"}]",
  }
]

위의 컬렉션을 반복하려고 시도하고 다음과 같은 오류가 발생합니다. TypeError: lists.imageData.map is not a function

this.productList.map((lists) => {
  lists.imageData.map((data) => {
    data.imageId
  })
})

따라서 렌더링하고 싶은 결과는 아래와 같으므로 레코드를 반복 할 수 있습니다.

[ RowDataPacket {
    productId: 3,
    imageData [
      {
        imageId: 18,
        imageUrl: /assets/images/321/image.jpg
      },
      {
        imageId: 17,
        imageUrl: /assets/images/322/image.jpg
      }
    ]
  }
]

관리자 도구에서 실행되는 SQL 쿼리

SELECT 
`products`.id AS productId,
GROUP_CONCAT(JSON_ARRAY(JSON_OBJECT(
  "imageId", `product_images_ids`.id, 
  "imageUrl", `product_images`.thumbnail_image
))) imageData
FROM `products`
JOIN `product_images_ids` ON `product_images_ids`.campaign_id = `products`.id
JOIN `product_images` ON `product_images`.id = `product_images_ids`.product_image_id
GROUP BY `products`.id

그리고 여기에 내가 관리자에서 얻는 결과 스크린 샷 이 있습니다.

나는 함께 확인했다 json_arrayagg 또한 json_objectagg 하지만 JSON 객체의 배열을 만들 수 수 없습니다.

PS : MySQL 버전 : 5.5.5-10.3.22-MariaDB

Józef Podlecki

CONCAT내부를 GROUP_CONCAT만들고 JSON여기에 객체를

npm mariadb모듈이 구조를 알아낼 지 잘 모르겠습니다.

let query = `SELECT 
  ${productTbl}.id AS productId,
  GROUP_CONCAT(
    CONCAT('{imageId:"'${prodImgTbl}'", imageUrl:"'${productImg}.thumbnail_image'"}')) imageData
  FROM ${productTbl} 

  JOIN ${prodImgTbl} ON ${prodImgTbl}.product_id = ${productTbl}.id
  JOIN ${productImg} ON ${productImg}.id = ${prodImgTbl}.product_image_id
  GROUP BY ${productTbl}.id`

그래도 작동하지 않으면 JSON 유형 (전체 GROUP_CONCAT 또는 그 안의 모든 표현식)으로 캐스트하십시오.

CAST(
  CONCAT(
    '[', GROUP_CONCAT(
      CONCAT('{"imageId": "'${prodImgTbl}'", 
        "imageUrl": "'${productImg}.thumbnail_image'"}')),']') 
  AS JSON) imageData

최신 mariadb 버전을 사용하는 경우 JSON_OBJECT가 있습니다.

GROUP_CONCAT(JSON_OBJECT("imageId", ${prodImgTbl}, "imageUrl", ${productImg}.thumbnail_image)) imageData

---편집하다

당신은 JSON.parse각각을 부를 수 있습니다imageData

this.productList = map(pr => ({...pr, imageData: JSON.parse(pr.imageData)}))

분명히 이전에 비슷한 질문이 있었고 여기에서는 쿼리에서 전체 JSON을 만드는 것이 좋습니다.

`SELECT JSON_OBJECT(
  'productId',
  ${productTbl}.id,
  'imageData',
  CAST(
    CONCAT(
      '[', GROUP_CONCAT(
        CONCAT('{"imageId": "'${prodImgTbl}'", 
          "imageUrl": "'${productImg}.thumbnail_image'"}')),']') 
  AS JSON)
  )
  FROM ${productTbl} 

  JOIN ${prodImgTbl} ON ${prodImgTbl}.product_id = ${productTbl}.id
  JOIN ${productImg} ON ${productImg}.id = ${prodImgTbl}.product_image_id
  GROUP BY ${productTbl}.id`

안타깝게도 여전히 전화해야합니다. JSON.parse

let records = JSON.parse(await pool.query(query));

JSON_OBJECTAGG도 있습니다.

let query = `SELECT 
  ${productTbl}.id AS productId,
  JSON_OBJECTAGG(${prodImgTbl}, ${productImg}.thumbnail_image) imageData
  FROM ${productTbl} 

  JOIN ${prodImgTbl} ON ${prodImgTbl}.product_id = ${productTbl}.id
  JOIN ${productImg} ON ${productImg}.id = ${prodImgTbl}.product_image_id
  GROUP BY ${productTbl}.id`

하지만 위의 배열을 배열로 만들고 어떤 JSON.parse식 으로든 호출하려면 여전히 일부 연결을 수행해야한다고 생각합니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

JSON 객체를 Posgres의 객체 배열로 변환하는 SQL

분류에서Dev

Javascript는 배열의 객체를 필터링하고 배열의 객체 배열에서 객체의 속성을 반환합니다.

분류에서Dev

배열을 포함한 Json을 반환하는 SQL 쿼리

분류에서Dev

객체의 JSON 배열을 JavaScript를 사용하여 명명 된 JSON 트리로 변환

분류에서Dev

객체의 JS 배열을 반복하고 일치하는 객체를 반환하고 원래 배열에서 제거합니까?

분류에서Dev

객체 배열을 반복하고 임의의 객체 값을 반환-JavaScript

분류에서Dev

SQL 쿼리에서 문자열의 시작을 검색하고 전체 문자열을 반환합니다.

분류에서Dev

객체의 JavaScript 배열을 반복하고 값 제거

분류에서Dev

단일 배열에서 JSON 응답에서 오는 키를 사용하여 객체 배열로 변환 -JAVASCRIPT-

분류에서Dev

JSON / Javascript : 특정 속성을 포함하는 배열 객체의 INDEX 반환

분류에서Dev

T-SQL에서 json 객체의 배열 항목을 참조하는 방법

분류에서Dev

node.js의 mySQL 쿼리에서 JSON 객체를 반환하는 방법

분류에서Dev

세 개의 mySQL 쿼리를 하나로 결합하고 하나의 JSON 객체를 반환합니다.

분류에서Dev

JSON 객체의 JavaScript 배열을 viewModel의 객체 목록에 바인딩하는 방법. dotnetcore mvc

분류에서Dev

PL / SQL 테이블에 JSON 배열을 반환하는 쿼리를 어떻게 실행합니까?

분류에서Dev

json 응답을 반복하고 하나의 배열을 반환합니다.

분류에서Dev

순수한 Javascript로 JSON 데이터에서 객체 중복을 제거하고 JSON 객체 내의 날짜 정보로 정렬하는 방법

분류에서Dev

배열 아래에 있고 객체 아래에있는 json 응답에서 값을 추출하는 방법

분류에서Dev

전체 json 문서 대신 단일 열을 쿼리하고 반환하는 ElasticSearch Java API

분류에서Dev

Java JSON / GSON-배열 내의 모든 객체를 검색하고 일치 항목을 반환합니다.

분류에서Dev

Angular.js에서 JSON 객체를 반환하고 배열하는 방법

분류에서Dev

JSON 객체를 반복하고 배열로 변환

분류에서Dev

쿼리를 기반으로 ElasticSearch의 배열에서 객체 제거

분류에서Dev

값이 객체의 배열 인 객체를 반복하고 객체 배열의 각 객체에서 하나의 값을 반환합니다.

분류에서Dev

Moya.Response 쿼리를 통해 반환 된 객체에서 중첩 된 JSON 배열을 구문 분석하는 방법

분류에서Dev

typescript / javascript는 객체의 중첩 배열에서 객체 부분 반복을 제거합니다.

분류에서Dev

MariaDB에서 json 객체 배열에서 값보다 작은 값을 검색하는 방법이 있습니까?

분류에서Dev

먼저 객체의 속성을 결합한 다음 Javascript를 사용하여 객체 배열에서 중복을 제거하는 방법

분류에서Dev

배열을 반복하고 PostgreSQL 쿼리 결과에서 객체를 생성하는 방법

Related 관련 기사

  1. 1

    JSON 객체를 Posgres의 객체 배열로 변환하는 SQL

  2. 2

    Javascript는 배열의 객체를 필터링하고 배열의 객체 배열에서 객체의 속성을 반환합니다.

  3. 3

    배열을 포함한 Json을 반환하는 SQL 쿼리

  4. 4

    객체의 JSON 배열을 JavaScript를 사용하여 명명 된 JSON 트리로 변환

  5. 5

    객체의 JS 배열을 반복하고 일치하는 객체를 반환하고 원래 배열에서 제거합니까?

  6. 6

    객체 배열을 반복하고 임의의 객체 값을 반환-JavaScript

  7. 7

    SQL 쿼리에서 문자열의 시작을 검색하고 전체 문자열을 반환합니다.

  8. 8

    객체의 JavaScript 배열을 반복하고 값 제거

  9. 9

    단일 배열에서 JSON 응답에서 오는 키를 사용하여 객체 배열로 변환 -JAVASCRIPT-

  10. 10

    JSON / Javascript : 특정 속성을 포함하는 배열 객체의 INDEX 반환

  11. 11

    T-SQL에서 json 객체의 배열 항목을 참조하는 방법

  12. 12

    node.js의 mySQL 쿼리에서 JSON 객체를 반환하는 방법

  13. 13

    세 개의 mySQL 쿼리를 하나로 결합하고 하나의 JSON 객체를 반환합니다.

  14. 14

    JSON 객체의 JavaScript 배열을 viewModel의 객체 목록에 바인딩하는 방법. dotnetcore mvc

  15. 15

    PL / SQL 테이블에 JSON 배열을 반환하는 쿼리를 어떻게 실행합니까?

  16. 16

    json 응답을 반복하고 하나의 배열을 반환합니다.

  17. 17

    순수한 Javascript로 JSON 데이터에서 객체 중복을 제거하고 JSON 객체 내의 날짜 정보로 정렬하는 방법

  18. 18

    배열 아래에 있고 객체 아래에있는 json 응답에서 값을 추출하는 방법

  19. 19

    전체 json 문서 대신 단일 열을 쿼리하고 반환하는 ElasticSearch Java API

  20. 20

    Java JSON / GSON-배열 내의 모든 객체를 검색하고 일치 항목을 반환합니다.

  21. 21

    Angular.js에서 JSON 객체를 반환하고 배열하는 방법

  22. 22

    JSON 객체를 반복하고 배열로 변환

  23. 23

    쿼리를 기반으로 ElasticSearch의 배열에서 객체 제거

  24. 24

    값이 객체의 배열 인 객체를 반복하고 객체 배열의 각 객체에서 하나의 값을 반환합니다.

  25. 25

    Moya.Response 쿼리를 통해 반환 된 객체에서 중첩 된 JSON 배열을 구문 분석하는 방법

  26. 26

    typescript / javascript는 객체의 중첩 배열에서 객체 부분 반복을 제거합니다.

  27. 27

    MariaDB에서 json 객체 배열에서 값보다 작은 값을 검색하는 방법이 있습니까?

  28. 28

    먼저 객체의 속성을 결합한 다음 Javascript를 사용하여 객체 배열에서 중복을 제거하는 방법

  29. 29

    배열을 반복하고 PostgreSQL 쿼리 결과에서 객체를 생성하는 방법

뜨겁다태그

보관