본문 바로가기
IT tech Coding/php

json 형식에서 쌍따옴표 때문에 빡쳐서 이런걸 생각해 내보다. "과의 전쟁

by Coding Life 2024. 6. 24.

보통 인치를 표현할때 산업현장에서는 "을 인치로 쓰는데...

이게 json으로 들어가면 어마어마한 .. 반전이 일어납니다.

'ㄹ'키를 누르고 한자를 누르면... '″ ' 마크로 변경해서 꼼수로 사용하고 있어요.

쌍따옴표 둘러쌓인 제이슨에서 골치아픈 일입니다. 우리가 " 부호를 자주 사용할때가 있지요.

josn 은 기본적으로 "안의 값을 넣는데, 그 안에 6" 6인치 이런식으로 된 것때문에 엉망이 되지요.

function generateItemCodeForAccessory($accessoryItem) {
    $code = strtolower(isset($accessoryItem['col1']) ? $accessoryItem['col1'] : '');
    // 디버그 코드 추가
    if (empty($code)) {
        print 'Invalid accessory item: ';
        var_dump($accessoryItem);
    }
    return $code;
}

위의 코드에서 따옴표 "를 특수문자  ″로 변경하는 코드를 넣어줘. 그래야 오류를 방지해야 합니다.

주어진 코드에서 따옴표 "를 특수문자 ″로 변경하는 코드를 추가하려면, str_replace 함수를 사용할 수 있습니다. 이 함수는 문자열 내에서 특정 문자열을 다른 문자열로 대체할 수 있습니다.

다음은 generateItemCodeForAccessory 함수에 따옴표 "를 특수문자 ″로 변경하는 코드를 추가한 예제입니다:

function generateItemCodeForAccessory($accessoryItem) {
    // 모든 문자열 값에서 "을 ″로 변환
    $accessoryItem = array_map(function($value) {
        return is_string($value) ? str_replace('"', '″', $value) : $value;
    }, $accessoryItem);

    $code = strtolower(isset($accessoryItem['col1']) ? $accessoryItem['col1'] : '');
    
    // 디버그 코드 추가
    if (empty($code)) {
        print 'Invalid accessory item: ';
        var_dump($accessoryItem);
    }
    return $code;
}
이 코드는 다음과 같이 작동합니다:

array_map 함수를 사용하여 $accessoryItem 배열의 모든 값을 순회합니다.
각 값이 문자열인 경우 str_replace 함수를 사용하여 모든 따옴표 "를 특수문자 ″로 대체합니다.
변환된 $accessoryItem 배열을 사용하여 원래 코드를 계속 실행합니다.
아래의 코드에도 위의 변환 과정이 필요하다.

    $stmh_fee_sub = $pdo->query($sql_fee_sub);
    while ($row = $stmh_fee_sub->fetch(PDO::FETCH_ASSOC)) {
        $items_array = array_filter(safe_json_decode($row['item']), 'strlen'); // 빈 값 제거
        
        foreach ($items_array as $item) {
            $generated_code = generateItemCodeForAccessory([
                'col1' => $item
            ]);
            if (!empty($generated_code)) {
                $items[$generated_code] = $generated_code;
            }
        }
    }


아래의 코드에 따옴표 "를 특수문자 ″로 변경하는 과정을 추가하려면, generateItemCodeForAccessory 함수와 함께 str_replace 함수를 사용하여 items_array의 각 항목을 변환할 수 있습니다.

다음은 변환 과정을 추가한 코드입니다:

$stmh_fee_sub = $pdo->query($sql_fee_sub);
while ($row = $stmh_fee_sub->fetch(PDO::FETCH_ASSOC)) {
    $items_array = array_filter(safe_json_decode($row['item']), 'strlen'); // 빈 값 제거
    
    foreach ($items_array as $item) {
        // "를 ″로 변환
        $item = str_replace('"', '″', $item);
        
        $generated_code = generateItemCodeForAccessory([
            'col1' => $item
        ]);
        if (!empty($generated_code)) {
            $items[$generated_code] = $generated_code;
        }
    }
}

$stmh_fee_sub = $pdo->query($sql_fee_sub);
while ($row = $stmh_fee_sub->fetch(PDO::FETCH_ASSOC)) {
    $items_array = array_filter(safe_json_decode($row['item']), 'strlen'); // 빈 값 제거
    
    foreach ($items_array as $item) {
        // "를 ″로 변환
        $item = str_replace('"', '″', $item);
        
        $generated_code = generateItemCodeForAccessory([
            'col1' => $item
        ]);
        if (!empty($generated_code)) {
            $items[$generated_code] = $generated_code;
        }
    }
}


이 코드는 다음과 같이 작동합니다:

safe_json_decode 함수로 디코딩한 items_array 배열의 각 항목을 순회합니다.
각 항목의 문자열에서 str_replace 함수를 사용하여 따옴표 "를 특수문자 ″로 대체합니다.
변환된 항목을 generateItemCodeForAccessory 함수에 전달합니다.
생성된 코드가 비어 있지 않으면, items 배열에 추가합니다.

" 쌍따옴표와 전쟁...

이걸 이겨야 합니다. 그래야 제이슨과 친해질 수 있어요~

반응형