๊ด€๋ฆฌ ๋ฉ”๋‰ด

C-log

[FE]jsonํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๊ฐ ๋ฌธ์ œ ์ด๋ฏธ์ง€ ๋„์šฐ๊ธฐ(2) ๋ณธ๋ฌธ

๐Ÿ’ป๊ฐœ๋ฐœ ๋…ธํŠธ/๋‚˜๋งŒ์˜ ์‹œํ—˜์ง€

[FE]jsonํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๊ฐ ๋ฌธ์ œ ์ด๋ฏธ์ง€ ๋„์šฐ๊ธฐ(2)

4:Bee 2024. 3. 2. 14:45
728x90

์•ž ํฌ์ŠคํŒ…์—์„œ ์ง์ ‘ ์ƒ˜ํ”Œ๋กœ ์ œ์ž‘๋œ jsonํŒŒ์ผ์„ ์ง์ ‘ ์ˆ˜์ • ํ•ด๋ณด์•˜๋‹ค. ์ด๋ฒˆ์—๋Š” ์ด๋ฏธ์ง€ํŒŒ์ผ์„ jsonํŒŒ์ผ๋กœ ๋„ฃ์–ด ๋†“๊ณ  ํ•ด๋‹น ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ฌ ๊ฒƒ์ด๋‹ค. ๋‚ด๊ฐ€ ์ˆ˜์ •ํ•œ jsonํŒŒ์ผ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 

{
    "sample": [
        {
            "id": "1",
            "image": "https://png.pngtree.com/thumb_back/fh260/background/20230609/pngtree-three-puppies-with-their-mouths-open-are-posing-for-a-photo-image_2902292.jpg",
            "question": "๋‹ค์Œ ์ค‘ ์ด์ค‘๋Ÿ‰ <img src=1/> 1.5ํ†ค ํ”ผ๊ฒฌ์ธ ์Šน์šฉ์ž๋™์ฐจ๋ฅผ 4.5ํ†ค ํ™”๋ฌผ์ž๋™์ฐจ๋กœ ๊ฒฌ์ธํ•˜๋Š” ๊ฒฝ์šฐ ํ•„์š”ํ•œ ์šด์ „๋ฉดํ—ˆ์— ํ•ด๋‹นํ•˜์ง€ ์•Š์€ \n๊ฒƒ์€?",
            "options": [
                "โ‘  ์ œ1์ข… ๋Œ€ํ˜•๋ฉดํ—ˆ ๋ฐ ์†Œํ˜•๊ฒฌ์ธ์ฐจ๋ฉดํ—ˆ",
                "โ‘ก ์ œ1์ข… ๋ณดํ†ต๋ฉดํ—ˆ ๋ฐ ๋Œ€ํ˜•๊ฒฌ์ธ์ฐจ๋ฉดํ—ˆ",
                "โ‘ข ์ œ1์ข… ๋ณดํ†ต๋ฉดํ—ˆ ๋ฐ ์†Œํ˜•๊ฒฌ์ธ์ฐจ๋ฉดํ—ˆ",
                "โ‘ฃ ์ œ2์ข… ๋ณดํ†ต๋ฉดํ—ˆ ๋ฐ ๋Œ€ํ˜•๊ฒฌ์ธ์ฐจ๋ฉดํ—ˆ"
            ],
            "questionImageUrls": [],
            "questionImageDescriptions": [
                ""
            ],
            "answers": [
                "4"
            ],
            "explanation": "๋„๋กœ๊ตํ†ต๋ฒ• ์‹œํ–‰๊ทœ์น™ ๋ณ„ํ‘œ18 ์ด์ค‘๋Ÿ‰ 750ํ‚ฌ๋กœ๊ทธ๋žจ์„ ์ดˆ๊ณผํ•˜๋Š” 3ํ†ค ์ดํ•˜์˜ ํ”ผ๊ฒฌ์ธ ์ž๋™์ฐจ๋ฅผ ๊ฒฌ์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฒฌ์ธ\nํ•˜๋Š” ์ž๋™์ฐจ๋ฅผ ์šด์ „ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉดํ—ˆ์™€ ์†Œํ˜•๊ฒฌ์ธ์ฐจ๋ฉดํ—ˆ ๋˜๋Š” ๋Œ€ํ˜•๊ฒฌ์ธ์ฐจ๋ฉดํ—ˆ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.",
            "explanationImageUrls": [],
            "explanationImageDescriptions": [],
            "tags": [],
            "type": "๊ฐ๊ด€์‹"
        },
...
}

์ด์ œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ๋„์›Œ ๋ณผ ๊ฒƒ์ด๋‹ค. ์ˆ˜์ •๋˜์–ด์•ผ ํ•  ๋ถ€๋ถ„์€ parseImageTag์ด๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

 
//HTML ๋ฌธ์ž์—ด์— ํฌํ•จ๋œ <img> ํƒœ๊ทธ๋ฅผ ์‹ค์ œ ์ด๋ฏธ์ง€๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜
  const parseImageTag = (question_img, question_img_url, question_img_class ) => {
    // ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ <img src=1> ๋ฌธ์ž์—ด์„ ์ฐพ๋Š”๋‹ค.
    const imgRegex = /<img\s+src=1\s*\/?>/g;
    // ๋Œ€์ฒดํ•  ์ด๋ฏธ์ง€ ํƒœ๊ทธ๋กœ ๊ต์ฒดํ•œ๋‹ค.
    return question_img.replace(imgRegex, `<img src="${question_img_url}" className="${question_img_class}" />`);
  };
 

์ถ”ํ›„์— className๋„ ๋ถˆ๋Ÿฌ์˜ฌ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ question_img_class๋„ ์ถ”๊ฐ€ํ•ด ๋‘์—ˆ๋‹ค. ์ด์ œ jsx๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

<ol>
        {data.map((item, index) => (
          <li key={index}>
            {/* ์งˆ๋ฌธ */}
            <p dangerouslySetInnerHTML={{ __html: parseImageTag(item.question, item.image, "test_image") }} />
            {/* 4์„ ์ง€ */}
            {item.options.map((option, index) => (
              <div key={index}>{option}</div>
            ))}
          </li>
        ))}
      </ol>

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด ๋ฌธ์ œ ์—†์ด ๋ธŒ๋ผ์šฐ์ €๋กœ HTMLํƒœ๊ทธ๋ฅผ ๋ณ€ํ™˜ ์‚ฝ์ž… ๋ฐ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

์ด๋ฒˆ์—” ๋” ๋‚˜์•„๊ฐ€์„œ ์ด๋ฏธ์ง€๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ธ ๊ฒฝ์šฐ์— ์ด๋ฏธ์ง€ ์‚ฝ์ž… ํ•˜๋Š” ๊ฒƒ์„ ์‹œ๋„ ํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค. ์ด ๋ถ€๋ถ„์€ ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ์ด์–ด์„œ ํ•ด๋ณด ๊ฒ ๋‹ค.

728x90
Comments