【问题标题】:JSON and CURL encodingJSON 和 CURL 编码
【发布时间】:2020-01-16 07:13:51
【问题描述】:

我有一个以 json 格式输出的 curl 页面,但我无法从 android 正确读取 json。我想要只有一个数组的 Json 格式,而不是对象和数组。例如,检查底部的输出。我想编写一个 php 代码来编码下面匹配的 json。我该怎么做?谢谢。

PHP 文件:

<?php
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ .  '/vendor/mashape/unirest-php/src/Unirest.php';


//$response = Unirest\Request::get("",
//  array(
//    "host" => "",
//    "key" => "
//  )
//);
//
//
//echo stripslashes(json_encode($response));


$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => "",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "json",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_HTTPHEADER, array('Accept: application/json'),
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => array(
        "host: ",
        "KEY: "
    ),
));


$response = curl_exec($curl);
$err = curl_error($curl);

$json = json_encode($response, JSON_UNESCAPED_SLASHES);


curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo stripslashes($response);
}

                        $fp = fopen('results.json', 'w');
                        fwrite($fp, stripslashes($response));
                        fclose($fp);

原始输出来自 CURL:

{
    "quoteResponse": 
        {
        "result": [{
            "language": "en-US",
            "region": "US",
            "quoteType": "EQUITY",
            "quoteSourceName": "Nasdaq Real Time Price",
            "exchangeDataDelayedBy": 0,
            "regularMarketPrice": 30.69,
            "regularMarketTime": 1568404801,
            "regularMarketChange": 0.48000145,
            "regularMarketVolume": 45547913,
            "shortName": "Advanced Micro Devices, Inc.",
            "priceHint": 2,
            "postMarketChangePercent": 0.0325846,
            "postMarketTime": 1568419190,
            "postMarketPrice": 30.7,
            "postMarketChange": 0.0100002,
            "regularMarketChangePercent": 1.5888827,
            "regularMarketPreviousClose": 30.21,
            "fullExchangeName": "NasdaqGS",
            "longName": "Advanced Micro Devices, Inc.",
            "market": "us_market",
            "pageViews": {
                "shortTermTrend": "UP",
                "midTermTrend": "UP",
                "longTermTrend": "UP"
            },
            "marketState": "CLOSED",
            "exchange": "NMS",
            "sourceInterval": 15,
            "exchangeTimezoneName": "America/New_York",
            "exchangeTimezoneShortName": "EDT",
            "gmtOffSetMilliseconds": -14400000,
            "esgPopulated": false,
            "tradeable": true,
            "triggerable": true,
            "symbol": "AMD"
        }],
        "error": null
    }
}

我想要的输出是没有quoteResponse 的输出。检查下面:

{
    "result": [{
        "language": "en-US",
        "region": "US",
        "quoteType": "EQUITY",
        "quoteSourceName": "Nasdaq Real Time Price",
        "regularMarketPrice": 30.69,
        "regularMarketTime": 1568404801,
        "regularMarketChange": 0.48000145,
        "regularMarketVolume": 45547913,
        "sourceInterval": 15,
        "exchangeTimezoneName": "America/New_York",
        "exchangeTimezoneShortName": "EDT",
        "pageViews": {
            "shortTermTrend": "UP",
            "midTermTrend": "UP",
            "longTermTrend": "UP"
        },
        "gmtOffSetMilliseconds": -14400000,
        "market": "us_market",
        "postMarketChangePercent": 0.0325846,
        "postMarketTime": 1568419190,
        "postMarketPrice": 30.7,
        "postMarketChange": 0.0100002,
        "regularMarketChangePercent": 1.5888827,
        "priceHint": 2,
        "shortName": "Advanced Micro Devices, Inc.",
        "regularMarketPreviousClose": 30.21,
        "fullExchangeName": "NasdaqGS",
        "longName": "Advanced Micro Devices, Inc.",
        "exchange": "NMS",
        "exchangeDataDelayedBy": 0,
        "esgPopulated": false,
        "tradeable": true,
        "triggerable": true,
        "marketState": "CLOSED",
        "symbol": "AMD"
    }],
    "error": null
}

【问题讨论】:

标签: php json android-studio curl


【解决方案1】:

解码您的 JSON,从中获取 quoteResponse 并再次对其进行编码。

$json = json_encode(json_decode($json)->quoteResponse);

【讨论】:

  • 我就是这么想的。你能给我举个例子吗?谢谢。
  • 究竟是什么样的例子?
  • 没关系。你太棒了!谢谢!
  • 我还有一个问题。假设json中有更多对象。例如, "1stobject:" "2ndObjsquoteResponse": { "result": [{}].... 我将如何删除第一个和第二个对象?
  • 您可以再次解码您的 JSON 并遍历数组并将数据从该数组保存到一个新数组,除了 1stobject、2ndobject 等。然后只需将该新数组编码为 JSON。
猜你喜欢
  • 2022-11-29
  • 2014-08-18
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 2017-01-27
  • 2011-09-21
  • 1970-01-01
相关资源
最近更新 更多