2016-03-24 9 views
1

私は、.txtファイルを取得し、JSONをデコードしてユーザーの電子メールと名前エントリをキャンペーンモニタデータベースにプッシュするPHPファイルを持っています。新しいエントリは、この例に見られるよう][で追加されているので、JSONはグラグラです:json_decode()の無効な配列

[{"email":"[email protected]","createdate":"2016-03-23 10:44:52","from_email":null,"from_liked_pageid":null,"source":"direct","bonus_entry_url":"\/xxxbyn\/h1lvw5","entry_url":"https:\/\/admin.woobox.com\/manage\/offers\/entries\/20160314-1\/tu%2BcJmnsgyUxE7HM9BCqnRjnza27dGIdr%2BHymHrFmFoprsRgkhZradPrTJ5s18p6ewxYeOOKLpObd%2FWGAS%2BDRw%3D%3D","shareurl":"http:\/\/woobox.com\/qbxbyn\/h1lvw5","picked":"0","actionbutton":"","custom_3_first":"drake","custom_3_last":"scott","custom_4":"4146583264","fullname":"drake scott","id":"vvvbyn"}] 
[{"email":"[email protected]","createdate":"2016-03-23 10:44:52","from_email":null,"from_liked_pageid":null,"source":"direct","bonus_entry_url":"\/xxx\/h1lvw5","entry_url":"https:\/\/admin.woobox.com\/manage\/offers\/entries\/20160314-1\/tu%2BcJmnsgyUxE7HM9BCqnRjnza27dGIdr%2BHymHrFmFoprsRgkhZradPrTJ5s18p6ewxYeOOKLpObd%2FWGAS%2BDRw%3D%3D","shareurl":"http:\/\/woobox.com\/vvvbyn\/h1lvw5","picked":"0","actionbutton":"","custom_3_first":"john","custom_3_last":"adams","custom_4":"4146585018","fullname":"john adams","id":"vvvbyn"}] 

私は今が午前問題は、私のデータベースにエントリをアップロードしています。 ][を取り除き、var_dump($content);に有効なJSON文字列を表示しています。ただし、var_dump($user)の場合は0 array(0) { }となります。

私のデータベースには、本質的に何もないので、エントリはアップロードされません。誰も私にどのように進めるかについてのいくつかの洞察を与えることができますか?

<?php 

require_once 'csrest_general.php'; 
require_once 'csrest_subscribers.php'; 

$auth = array(
'api_key' => 'xxxxxxxxxx'); 
$wrap = new CS_REST_Subscribers('xxxxxxxxxx', $auth); 

$url = 'http://www.mywebsite.com/sweeps/test.txt'; 
$content = file_get_contents($url);  
$content = str_replace('}][{', '},{', $content); 

$tmp = explode('][', $content); 
foreach ($tmp as $json_part) { 
$user = json_decode('['.rtrim(ltrim($json_string, '['), ']').']', true); 
$result = $wrap->add(array(
    'EmailAddress' => $user->email, 
    'Name' => $user->fullname, 
    'Resubscribe' => true 

)); 
}  

if($result->was_successful()) { 
echo "Subscribed with code ".$result->http_status_code; 

} 

else { 
echo "failed"; 
var_dump($result->response); 
var_dump($user); 
} 
?> 
+0

$content = str_replace('][', ',', $content); $users = json_decode($content, true); 

は、その後、あなたはそれから何をしたいかを決定する必要があります複数のユーザーを持つ多次元配列を持っている:JSONを有効にする最も簡単な方法は、配列を作成することですええ、私は16行目でそれを使ってみました。 – chronotrigga

+0

私はまだJSON *の文字列表現を編集している理由を頭に入れています。リストは '] []で区切られているのではなく、*' [] 'で囲まれていることを知っていますか? – Sammitch

+0

これは私のコールバックURLに情報を送信するwooboxからのものです。彼らのjsonは正直に幸いであり、ユーザ入力の間に時間があれば(例えば、ユーザAが自分の名前/電子メールを入力した後、ユーザBは10分後に自分の名前/電子メールを入力する)、 2つの別々の文字列を使用して、私の中に括弧を入れてください。私はstr_replaceで回避策を講じなければなりませんでした。 – chronotrigga

答えて

1

ファイルに複数のJSONオブジェクトが連結されています。

print_r($users); 

foreach($users as $user) { 
    echo $user['email'] . "\n"; 
} 
+0

ありがとうございます。残念ながら私は空白の白い画面を受信して​​います。エコーに電子メールが出力されない、http://paste.ofcode.org/7UZCgTHgKBgd55i42RzNEN – chronotrigga

+2

あなたは私の答えの編集の間にコピーしました。更新されたコードを上と下の両方で試してください。 http://sandbox.onlinephpfunctions.com/code/da4e5a6cd13c76a1ad760073d16aca6f263a3607 – AbraCadaver

+0

ありがとうございました!問題を完全に解決しました。 – chronotrigga

関連する問題