kaufmanndk
Добрый день.
Я новичок в программировании, столкнулся с этим по работе. Потихоньку изучаю азы.
Но мне уже сейчас нужно решить одну задачу.Есть файл Json,
использую функциюPHP:
Получаю вот такое содержимое.
Код (Text):
Array ( [GetLowestOfferListingsForASINResult] => Array ( [@attributes] => Array ( [ASIN] => 3944628675 [status] => Success ) [AllOfferListingsConsidered] => false [Product] => Array ( [Identifiers] => Array ( [MarketplaceASIN] => Array ( [MarketplaceId] => A1PA6795UKMFR9 [ASIN] => 3944628675 ) ) [LowestOfferListings] => Array ( [LowestOfferListing] => Array ( [0] => Array ( [Qualifiers] => Array ( [ItemCondition] => Used [ItemSubcondition] => Mint [FulfillmentChannel] => Amazon [ShipsDomestically] => True [ShippingTime] => Array ( [Max] => 0-2 days ) [SellerPositiveFeedbackRating] => 98-100% ) [NumberOfOfferListingsConsidered] => 2 [SellerFeedbackCount] => 2907 [Price] => Array ( [LandedPrice] => Array ( [CurrencyCode] => EUR [Amount] => 21.42 ) [ListingPrice] => Array ( [CurrencyCode] => EUR [Amount] => 21.42 ) [Shipping] => Array ( [CurrencyCode] => EUR [Amount] => 0.00 ) ) [MultipleOffersAtLowestPrice] => True ) [1] => Array ( [Qualifiers] => Array ( [ItemCondition] => Used [ItemSubcondition] => Mint [FulfillmentChannel] => Merchant [ShipsDomestically] => True [ShippingTime] => Array ( [Max] => 0-2 days ) [SellerPositiveFeedbackRating] => 90-94% ) [NumberOfOfferListingsConsidered] => 1 [SellerFeedbackCount] => 96754 [Price] => Array ( [LandedPrice] => Array ( [CurrencyCode] => EUR [Amount] => 21.43 ) ) ) ) ) [ResponseMetadata] => Array ( [RequestId] => 67781c38-cdd4-48e9-a8f0-3012f61696cf ) )В этом файле (возврате/ответе после json_decode) находятся 2 таких «отсека»
Код (Text):
[Price] => Array ( [LandedPrice] => Array ( [CurrencyCode] => EUR [Amount] => 21.42 ) [ListingPrice] => Array ( [CurrencyCode] => EUR [Amount] => 21.42 ) [Shipping] => Array ( [CurrencyCode] => EUR [Amount] => 0.00 ) )Мне нужно получить все 2 значения только отсюда
Код (Text):
[LandedPrice] => Array ( [CurrencyCode] => EUR [Amount] => 21.42 )и записать их столбиком в текстовой файл.
Извиняюсь за такую простыню, я не знаю как тут можно скрыть сам код.
Буду очень рад Вашей помощи.
Drunkenmunky
Будет проще, если вы выгрузите куда-нибудь оригинальный файл.
MouseZver
PHP:
$LandedPrice = $a -> GetLowestOfferListingsForASINResult -> Product -> LowestOfferListings -> LowestOfferListing -> {0} -> Price -> LandedPrice;
kaufmanndk
Огромное спасибо. То что мне нужно.!!)))
У меня вопрос. А что делать если грубо говоря две таких почти одинаковых формы информации в файле?
У меня получается тогда нужно сделать вот так
- $LandedPrice ]= $a -> GetLowestOfferListingsForASINResult
-> [0]- -> Product
- -> LowestOfferListings
- -> LowestOfferListing
- -> {0}
- -> Price
- -> LandedPrice;
- print_r ( $LandedPrice );
То что отмечено жирным шрифтом, это нужно получается менять в ручную? Например если у меня 20 таких блоков в файле (в примере был только один блок), то мне нужно писать для каждого 1,2,3,4 … ? А можно ли как то сделать так, что бы было что то вроде знака «*» или, что бы было автоматическое определение сколько всего таких массивов (блоков) там будет.
MouseZver
не знаю, ломать голову на гадании не хочу.
kaufmanndk
Понимаю. Извиняюсь.
Вот как поступить именно в этом случае ?
Я загрузил файл.
Смысл в том, что в первом примере делается один запрос и я получаю тот ответ. В текстовом файле пример того, что я получаю, когда делаю 2 запроса. И получается мне нужно сделать всё тоже самое, что и у Вас, но ещё добавить [0] после «GetLowestOfferListingsForASINResult».
— Добавлено —Я загрузил файл.
Drunkenmunky
Содержимое $objJsonDocument
kaufmanndk
PHP:
foreach($arrOutput[‘GetLowestOfferListingsForASINResult’][‘0’][‘Product’][‘LowestOfferListings’][‘LowestOfferListing’] as $price) { echo $price[‘Price’][‘LandedPrice’][‘Amount’] . PHP_EOL; } foreach($arrOutput[‘GetLowestOfferListingsForASINResult’][‘1’][‘Product’][‘LowestOfferListings’][‘LowestOfferListing’] as $price1) { echo $price[‘Price’][‘LandedPrice’][‘Amount’] . PHP_EOL; }Проблема в том, что одна программа делает разное количество запросов и записывает их в текст. Если в текстовом файле один запрос (как в примере выше), то всё работает, но если больше одного, то мне надо постоянно узнавать сколько было запросов, что бы изменять [0] на [1] …[17].
— Добавлено —
Содержимое файла это ответ обработанный функцией $arrOutput = json_decode($objJsonDocument, TRUE);
Drunkenmunky
PHP:
foreach($arrOutput[‘GetLowestOfferListingsForASINResult’] as $value) ( { echo $value[‘Product’][‘LowestOfferListings’][‘Price’][‘LandedPrice’][‘Amount’].‘<br>’; } )
kaufmanndk
[
К сожалению я получаю вот такую ошибку
Parse error: syntax error, unexpected ‘if’ (T_IF)
Drunkenmunky
PHP:
Исправил, вроде бы. foreach($arrOutput[‘GetLowestOfferListingsForASINResult’] as $value) { { echo $value[‘Product’][‘LowestOfferListings’][‘Price’][‘LandedPrice’][‘Amount’].‘<br>’; } }
kaufmanndk
В этом случае к сожалению ничего не находит.
Drunkenmunky
Вероятно потому, что нет правильного пути к выводимому.
Нужен оригинальный json-файл
kaufmanndk
Вот скрипт с которым я работаю.
PHP:
<?php if ($objXmlDocument === FALSE) { echo «There were errors parsing the XML file.n«; echo $error->message; } exit; } foreach($arrOutput[‘GetLowestOfferListingsForASINResult’][‘0’][‘Product’][‘LowestOfferListings’][‘LowestOfferListing’] as $price) { echo $price[‘Price’][‘LandedPrice’][‘Amount’] . PHP_EOL; } foreach($arrOutput[‘GetLowestOfferListingsForASINResult’][‘1’][‘Product’][‘LowestOfferListings’][‘LowestOfferListing’] as $price1) { echo $price[‘Price’][‘LandedPrice’][‘Amount’] . PHP_EOL; } ?>Оригинальный файл я загрузил так же.
Пришлось переделать расширение в тхт. так как xml загружать нельзя.
Drunkenmunky
Так пойдет?
PHP:
<?php $objXmlDocument->registerXPathNamespace(‘r’, ‘http://mws.amazonservices.com/schema/Products/2011-10-01’); if ($objXmlDocument === FALSE) { echo «There were errors parsing the XML file.n«; echo $error->message; } exit; } $result = $objXmlDocument->xpath(‘//r:Price/r:LandedPrice’); echo ‘<pre>’; ?>
kaufmanndk
Xml как альтернатива пойдёт, но в дальнейшем я бы всё же хотел именно Json
Этот вариант, тоже хороший и я скорее всего буду им пока пользоваться.Но он выдаёт всё ват такими блоками, мне нужно, что бы была только цена, так как она будет потом записываться в тхт столбиком.
Код (Text):
SimpleXMLElement Object ( [CurrencyCode] => EUR [Amount] => 20.86 )
Drunkenmunky
В xpath запросе измените на //rrice/r:LandedPrice/r:Amount
kaufmanndk
Теперь выдаёт вот так.
Код (Text):
SimpleXMLElement Object ( [0] => 21.05 )
Drunkenmunky
Ну, так и обрабатывайте $result как вам надо
Вот так вывод в столбик.PHP:
foreach($result as $item) { echo $item[0].‘<br>’; }
kaufmanndk
Точно. Я просто только недавно столкнулся с программированием.
Огромное Вам спасибо! Всё работает.!