2017-11-20 12 views
1

APIから返された文字列があります。何らかの理由で、返されるJSON内の値の1つがnull54でjson_decodeを破るため、配列として正しくアクセスすることができません。phpを使用して単語内の数字を削除する

例文字列:{"ttl": null54 "card_id": "np"}.DPTQIg.eeQ-wZYaH8ptEofYGZM0E8ICZDQ

あなたは、これはttlの値としてnull54を持って表示されます。これにより、以下のPHPが動作しなくなります。私が手動で54を削除すると、PHPは正常に動作します。どのように私はnullとphpが動作しないようにすることがあります番号を削除できますか?私はそれが常に54であることを保証することはできません。

ワーキングPHP:

$string = '{"ttl": null, "card_id": "np"}.DPSXmw.VApKpbKiEnEoRgwWblgt-nuewFg'; 
$string = explode('}', $string); 

$json = json_decode($string[0] .'}'); 
echo $json->card_id; 

ノンワーキングPHP:

$string = '{"ttl": null54, "card_id": "np"}.DPSXmw.VApKpbKiEnEoRgwWblgt-nuewFg'; 
$string = explode('}', $string); 

$json = json_decode($string[0] .'}'); 
echo $json->card_id; 
+2

異なる方向からアプローチするだけで(これはあなたのケースでは実行可能かどうかわかりませんが)、APIにバグを起こすことはできますか? –

+1

ええ、私はAPIを提供している人々に不平を言うでしょう。それは誰かが明確にコピーしてはいけないはずの変数を貼り付けたようです。 – ceejayoz

+0

私はこれをやったが、すぐにこれを修正するつもりはないので、今のところそれを試してみる必要がある。挫折! –

答えて

1

これは明らかにAPIのバグで、あなたがバグを上げる必要があるという点で、クリス・forrence @正しいです可能であればAPIメンテナー...それは、少なくともしばらくは、問題を回避する必要があると言われています。

これを行う最も簡単な方法は、正規表現の検索と置換を使用することだと思います。これはpreg_replace()機能で扱うことができ、次のようになります。

$string = preg_replace('/null[0-9]+/', 'null', $string) 

ここで最初の引数が文字列「NULL」と、それを次の桁の任意の番号に一致する正規表現です。

+3

サイドノート:あなたが選んだ解決策、OP、*バグも修正されたときに動作することを確認する*。 – ceejayoz

+0

ありがとうございます@ Jacobm001私はこれを試してみます。私は今日APIチームのバグを報告しましたが、その間に回避策が必要です。 ceejayozが言及したように、私はnull内で数字の有無にかかわらず動作することを確認する必要があります –

関連する問題