невозможно декодировать JSON с помощью PHP

0

Я пытаюсь разобрать json-переменную в php и выделить конкретное значение.

Мой json

{
  "currencyCode": "USD",
  "id": "278QQZYEIEJDSMA1L2",
  "link": [
    {
      "rel": "hosted_payment",
      "uri": "https://pay.test.netbanx.com/hosted/v1/payment/53616c7465645f5fac1b7ed6a320e392498376e38afc42ada7b2c646af7de3e4bc58c77905e8032d"
    },
    {
      "rel": "self",
      "uri": "https://devcentre4619:B-qa2-0-548a0405-302c02140e37a359f831dab53896f0cd7ba5d312787b7070021416ab2196d33848a5e936f65ff50f780d8a08aeb6@api.test.netbanx.com/hosted/v1/orders/278QQZYEIEJDSMA1L2"
    },
    {
      "rel": "resend_callback",
      "uri": "https://devcentre4619:B-qa2-0-548a0405-302c02140e37a359f831dab53896f0cd7ba5d312787b7070021416ab2196d33848a5e936f65ff50f780d8a08aeb6@api.test.netbanx.com/hosted/v1/orders/278QQZYEIEJDSMA1L2/resend_callback"
    }
  ],
  "merchantRefNum": "89983481",
  "mode": "live",
  "totalAmount": "1234",
  "type": "order"
}

Мне нужно уметь убирать uri когда rel= hosted_payment

Я написал следующий код php

<?php

$jsonData = '{
  "currencyCode": "USD",
  "id": "278QQZYEIEJDSMA1L2",
  "link": [
    {
      "rel": "hosted_payment",
      "uri": "https://pay.test.netbanx.com/hosted/v1/payment/53616c7465645f5fac1b7ed6a320e392498376e38afc42ada7b2c646af7de3e4bc58c77905e8032d"
    },
    {
      "rel": "self",
      "uri": "https://devcentre4619:B-qa2-0-548a0405-302c02140e37a359f831dab53896f0cd7ba5d312787b7070021416ab2196d33848a5e936f65ff50f780d8a08aeb6@api.test.netbanx.com/hosted/v1/orders/278QQZYEIEJDSMA1L2"
    },
    {
      "rel": "resend_callback",
      "uri": "https://devcentre4619:B-qa2-0-548a0405-302c02140e37a359f831dab53896f0cd7ba5d312787b7070021416ab2196d33848a5e936f65ff50f780d8a08aeb6@api.test.netbanx.com/hosted/v1/orders/278QQZYEIEJDSMA1L2/resend_callback"
    }
  ],
  "merchantRefNum": "89983481",
  "mode": "live",
  "totalAmount": "1234",
  "type": "order"
}';
// convert the string to a json object
$jfo = json_decode($jsonData);

// copy the link array to a php var
$posts = $jfo->link;
// listing links
foreach ($link as $link) {
    if (strcmp("hosted_payment", $link->rel) == 0) {
        echo $link->uri;
    }
}

Но я получаю ошибку

Notice: Undefined variable: link in E:\xampp\htdocs\json\decode.php on line 31

Warning: Invalid argument supplied for foreach() in E:\xampp\htdocs\json\decode.php on line 31

Я не могу понять, почему это происходит, пожалуйста, укажите, где я делаю ошибку.

  • 0
    Вы назначаете на $posts , а не на $link . Пропустить временную переменную.
  • 0
    где переменная $ link и она бесполезна
Теги:

1 ответ

3
Лучший ответ

Вы не используете переменную $link.

<?php

// setting json data
$jsonData = '{
  "currencyCode": "USD",
  "id": "278QQZYEIEJDSMA1L2",
  "link": [
    {
      "rel": "hosted_payment",
      "uri": "https://pay.test.netbanx.com/hosted/v1/payment/53616c7465645f5fac1b7ed6a320e392498376e38afc42ada7b2c646af7de3e4bc58c77905e8032d"
    },
    {
      "rel": "self",
      "uri": "https://devcentre4619:B-qa2-0-548a0405-302c02140e37a359f831dab53896f0cd7ba5d312787b7070021416ab2196d33848a5e936f65ff50f780d8a08aeb6@api.test.netbanx.com/hosted/v1/orders/278QQZYEIEJDSMA1L2"
    },
    {
      "rel": "resend_callback",
      "uri": "https://devcentre4619:B-qa2-0-548a0405-302c02140e37a359f831dab53896f0cd7ba5d312787b7070021416ab2196d33848a5e936f65ff50f780d8a08aeb6@api.test.netbanx.com/hosted/v1/orders/278QQZYEIEJDSMA1L2/resend_callback"
    }
  ],
  "merchantRefNum": "89983481",
  "mode": "live",
  "totalAmount": "1234",
  "type": "order"
}';

// convert the string to a json object
$jfo = json_decode($jsonData);

// copy the link array to a php var
$links = $jfo->link;

// listing links
foreach ($links as $link) {
          if (strcmp("hosted_payment", $link->rel) == 0) {
                    echo $link->uri;
          }
}

Просто измените $posts на $links и измените переменную $link в foreach на $links.

  • 1
    Duh !!! как глупо я упустил из виду, что у меня есть переменная в виде $posts спасибо, приятель :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню