একটি পিএইচপি স্ক্রিপ্ট থেকে জেএসএন ফিরে আসছেন


875

আমি পিএইচপি স্ক্রিপ্ট থেকে জেএসএনকে ফিরিয়ে দিতে চাই।

আমি কি ফলাফলটি প্রতিধ্বনি করব? আমি কি Content-Typeশিরোনাম সেট করতে হবে ?

উত্তর:


1602

আপনি সাধারণত এটি ব্যতীত ভাল থাকাকালীন আপনি কন্টেন্ট-টাইপ শিরোনাম সেট করতে এবং করতে পারেন:

<?PHP
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);

যদি আমি কোনও নির্দিষ্ট কাঠামো ব্যবহার না করে থাকি তবে আমি সাধারণত কিছু অনুরোধের প্যারামগুলিকে আউটপুট আচরণ পরিবর্তন করার অনুমতি দিই। এটি দ্রুত সমস্যা সমাধানের জন্য, কোনও শিরোনাম না প্রেরণে, বা কখনও কখনও প্রিন্ট_আর আইট্রোলে ডেটা পেলডকে প্রিন্ট করা যায় (যদিও বেশিরভাগ ক্ষেত্রে এটি প্রয়োজনীয় হওয়া উচিত নয়)।


9
কেবলমাত্র ক্ষেত্রে: "হেডার ইতিমধ্যে প্রেরিত" সতর্কতাগুলি এড়াতে আপনার আউটপুট বাফারিং ছাড়াও শিরোনাম () কমান্ডগুলি ব্যবহার করা উচিত
কেভিন

6
পিএইচপি ফাইলটি বিওএম ছাড়াই ইউটিএফ -8 এ এনকোড করতে হবে :)
ক্রিজিসটফ কালিনোভস্কি

217
header('Content-type:application/json;charset=utf-8');
টিমো হুভিনেন

14
@ মাইকেপোট আমি পিএইচপি ফাইলের শীর্ষে হেডার কমান্ড থাকা প্রয়োজন বলে মনে করি না। যদি আপনি অজান্তে স্টিফ আউট করে চলেছেন এবং এটি আপনার শিরোনাম কমান্ডটি ট্রিপ করছে তবে আপনার কোডটি ভঙ্গ হয়ে যাওয়ার কারণে আপনাকে কেবল ঠিক করতে হবে।
হাফস্টপ

8
@ KrzysztofKalinowski না, পিএইচপি ফাইলটি ইউটিএফ -8 এনকোড হওয়া দরকার নেই। আউটপুটটি ইউটিএফ -8 এনকোড হওয়া আবশ্যক। এই ভুল বক্তব্যগুলি অভিজ্ঞতাকৃত ব্যবহারকারীদের কীভাবে ভাঙ্গা থেকে বাঁচতে পারে তা শিখতে সহায়তা করে না, তবে এটি তাদের উপর মিথগুলি বাড়ায় এবং এডমোডিংগুলি স্ট্রিমগুলিতে কোন ভূমিকা পালন করে এবং কীভাবে তারা কাজ করে তা শিখতে সাহায্য করে না।
Costxel Costas Pena

124

JSON ফেরত সুন্দর এবং পরিষ্কার পিএইচপি কোডের একটি সম্পূর্ণ অংশ:

$option = $_GET['option'];

if ( $option == 1 ) {
    $data = [ 'a', 'b', 'c' ];
    // will encode to JSON array: ["a","b","c"]
    // accessed as example in JavaScript like: result[1] (returns "b")
} else {
    $data = [ 'name' => 'God', 'age' => -1 ];
    // will encode to JSON object: {"name":"God","age":-1}  
    // accessed as example in JavaScript like: result.name or result['name'] (returns "God")
}

header('Content-type: application/json');
echo json_encode( $data );

44

পদ্ধতির ম্যানুয়ালjson_encode অনুসারে একটি নন-স্ট্রিং ( মিথ্যা ) ফিরিয়ে দিতে পারে :

সাফল্য বা FALSEব্যর্থতার জন্য একটি JSON এনকোডড স্ট্রিংটি দেয়।

যখন এটি ঘটে তখন echo json_encode($data)খালি স্ট্রিং আউটপুট আসবে, যা অবৈধ জেএসওএন

json_encodeউদাহরণস্বরূপ ব্যর্থ হবে (এবং ফিরে false) যদি তার যুক্তিতে কোনও ইউটিএফ -8 স্ট্রিং থাকে।

এই ত্রুটি শর্তটি পিএইচপি-তে বন্দী করা উচিত, উদাহরণস্বরূপ:

<?php
header("Content-Type: application/json");

// Collect what you need in the $data variable.

$json = json_encode($data);
if ($json === false) {
    // Avoid echo of empty string (which is invalid JSON), and
    // JSONify the error message instead:
    $json = json_encode(["jsonError" => json_last_error_msg()]);
    if ($json === false) {
        // This should not happen, but we go all the way now:
        $json = '{"jsonError":"unknown"}';
    }
    // Set HTTP response status code to: 500 - Internal Server Error
    http_response_code(500);
}
echo $json;
?>

তারপরে প্রাপ্তির অবশ্যই অবশ্যই সচেতন হওয়া উচিত যে jsonError সম্পত্তির উপস্থিতি একটি ত্রুটির শর্তটি নির্দেশ করে, যা এটি অনুসারে চিকিত্সা করা উচিত।

উত্পাদন মোডে ক্লায়েন্টকে কেবল জেনেরিক ত্রুটি স্থিতি প্রেরণ করা এবং পরবর্তী তদন্তের জন্য আরও নির্দিষ্ট ত্রুটি বার্তাগুলি লগ করা ভাল।

পিএইচপি এর ডকুমেন্টেশনে জেএসএন ত্রুটিগুলি নিয়ে কাজ করার বিষয়ে আরও পড়ুন ।


2
charsetজেএসএনের কোনও প্যারামিটার নেই ; শেষে নোট দেখুন tools.ietf.org/html/rfc8259#section-11 : "না 'অক্ষরসেট' প্যারামিটার এই নিবন্ধনের জন্য সংজ্ঞায়িত করা হয় এক যোগ করার পদ্ধতি সত্যিই অনুবর্তী প্রাপকদের উপর কোনো প্রভাব নেই।।" (জেএসএনকে অবশ্যই সরঞ্জাম অনুসারে ইউটিএফ -8 হিসাবে প্রেরণ করতে হবে।এইটিএফ.org / html / rfc8259 # সেকশন-8.1 , সুতরাং এটি ইউটিএফ -8 হিসাবে এনকোড করা কিছুটা নিরর্থক বলে উল্লেখ করে))
প্যাট্রিক ডার্ক

1
এটি প্রকাশের জন্য ধন্যবাদ, অপ্রয়োজনীয় charsetপরামিতি HTTP শিরোনামের স্ট্রিং থেকে সরানো হয়েছে।
ট্রিনকোট

38

ডেটা এনকোড করতে এবং কনটেন্ট-টাইপ সেট করতে json_encode চেষ্টা করুন header('Content-type: application/json');


15

কনটেন্ট প্রকারটি সেট করুন header('Content-type: application/json');এবং তারপরে আপনার ডেটা প্রতিধ্বনি করুন।


12

অ্যাক্সেস সুরক্ষা সেট করাও ভাল - আপনি যে ডোমেনে পৌঁছাতে সক্ষম হতে চান সেটি কেবল * প্রতিস্থাপন করুন।

<?php
header('Access-Control-Allow-Origin: *');
header('Content-type: application/json');
    $response = array();
    $response[0] = array(
        'id' => '1',
        'value1'=> 'value1',
        'value2'=> 'value2'
    );

echo json_encode($response); 
?>

এখানে আরও নমুনা রয়েছে: অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্সকে কীভাবে বাইপাস করবেন?


7
<?php
$data = /** whatever you're serializing **/;
header("Content-type: application/json; charset=utf-8");
echo json_encode($data);
?>

হেডারে চরসেটটি উল্লেখ করে তফাত কী? ধন্যবাদ, ধন্যবাদ।
সানকসফন

6

যেমন উপরে বলা হয়েছে:

header('Content-Type: application/json');

কাজ করা হবে। তবে মনে রাখবেন:

  • এই শিরোনামটি ব্যবহার না করা সত্ত্বেও জাজসন পড়তে আজাক্সের কোনও সমস্যা হবে না, যদি আপনার জসনে কিছু এইচটিএমএল ট্যাগ থাকে except এই ক্ষেত্রে আপনাকে শিরোনামটি অ্যাপ্লিকেশন / জেসন হিসাবে সেট করতে হবে।

  • আপনার ফাইলটি UTF8-BOM এ এনকোডড না রয়েছে তা নিশ্চিত করুন। এই ফর্ম্যাটটি ফাইলের শীর্ষে একটি অক্ষর যুক্ত করে, তাই আপনার শিরোনাম () কল ব্যর্থ হবে।


4

HTTP স্থিতি কোড সহ একটি JSON প্রতিক্রিয়া ফিরিয়ে দেওয়ার জন্য একটি সাধারণ ফাংশন ।

function json_response($data=null, $httpStatus=200)
{
    header_remove();

    header("Content-Type: application/json");

    http_response_code($httpStatus);

    echo json_encode($data);

    exit();
}

1
header_remove, এবং স্পষ্টভাবে http প্রতিক্রিয়া সেট করা একটি ভাল ধারণা; যদিও স্থিতি স্থির করা হয় এবং তারপরে HT_response অনর্থক মনে হয়। exitশেষ পর্যন্ত একটি বিবৃতি যুক্ত করতে পারে। আমি @trincot সঙ্গে আপনার ফাংশন মিলিত 'S: stackoverflow.com/a/35391449/339440
স্টিফেন আর

পরামর্শের জন্য ধন্যবাদ. আমি সবেমাত্র উত্তরটি আপডেট করেছি।
ড্যান

3

আপনার প্রশ্নের উত্তর এখানে ,

এটা বলে.

JSON পাঠ্যের জন্য MIME মিডিয়া প্রকারটি হ'ল অ্যাপ্লিকেশন / জেসন।

সুতরাং আপনি যদি সেই ধরণের শিরোনাম সেট করেন এবং আপনার JSON স্ট্রিং আউটপুট করেন তবে এটি কাজ করা উচিত।


1

হ্যাঁ, আউটপুট প্রদর্শন করতে আপনাকে প্রতিধ্বনি ব্যবহার করতে হবে। মাইমটাইপ: অ্যাপ্লিকেশন / জেসন


1

আপনার যদি পিএইচপি থেকে কাস্টম তথ্য প্রেরণ করা থেকে header('Content-Type: application/json');জসন দরকার হয় তবে অন্য কোনও জিনিস মুদ্রণের জন্য আপনি এটি যুক্ত করতে পারেন , তারপরে আপনি প্রিন্ট করতে পারবেনecho '{"monto": "'.$monto[0]->valor.'","moneda":"'.$moneda[0]->nombre.'","simbolo":"'.$moneda[0]->simbolo.'"}';


1

আপনি যদি কোনও ডাটাবেস অনুসন্ধান করেন এবং ফলাফল JSON ফর্ম্যাটে সেট করতে চান এটি এটি করা যেতে পারে:

<?php

$db = mysqli_connect("localhost","root","","mylogs");
//MSG
$query = "SELECT * FROM logs LIMIT 20";
$result = mysqli_query($db, $query);
//Add all records to an array
$rows = array();
while($row = $result->fetch_array()){
    $rows[] = $row;
}
//Return result to jTable
$qryResult = array();
$qryResult['logs'] = $rows;
echo json_encode($qryResult);

mysqli_close($db);

?>

JQuery ব্যবহার করে ফলাফল বিশ্লেষণে সহায়তার জন্য এই টিউটোরিয়ালটি একবার দেখুন ।


1

পুরুষ মহিলা এবং ব্যবহারকারী আইডি ফিরিয়ে দেওয়ার জন্য এটি একটি সাধারণ পিএইচপি স্ক্রিপ্ট যা জেসন ভ্যালু যে কোনও এলোমেলো মান হবে যখন আপনি স্ক্রিপ্টটিকে জসন.এফপি বলবেন।

আশা করি এই সাহায্য ধন্যবাদ

<?php
header("Content-type: application/json");
$myObj=new \stdClass();
$myObj->user_id = rand(0, 10);
$myObj->male = rand(0, 5);
$myObj->female = rand(0, 5);
$myJSON = json_encode($myObj);
echo $myJSON;
?>

JSON পাঠ্যের জন্য মাইমিয়া মিডিয়া টাইপটি হ'ল অ্যাপ্লিকেশন / জেসন
এএ

0

আপনার ডোমেন অবজেক্টগুলিকে জেএসএনে ফর্ম্যাট করার একটি সহজ উপায় হ'ল মার্শাল সিরিয়ালাইজার ব্যবহার করা । তারপরে ডেটা পাস করুন json_encodeএবং আপনার প্রয়োজনের জন্য সঠিক সামগ্রী-প্রকারের শিরোনাম প্রেরণ করুন। আপনি যদি সিম্ফনির মতো কাঠামো ব্যবহার করেন তবে আপনাকে ম্যানুয়ালি হেডারগুলি সেট করার যত্ন নিতে হবে না। সেখানে আপনি JsonResponse ব্যবহার করতে পারেন

উদাহরণস্বরূপ জাভাস্ক্রিপ্টের সাথে ডিল করার জন্য সঠিক সামগ্রী-প্রকার হবে application/javascript

বা আপনার যদি কিছু বেশিরভাগ পুরানো ব্রাউজারগুলি সমর্থন করার প্রয়োজন হয় তবে এটি সবচেয়ে নিরাপদ text/javascript

মোবাইল অ্যাপ্লিকেশানের মতো অন্যান্য সমস্ত কাজের application/jsonজন্য সামগ্রী-প্রকার হিসাবে ব্যবহার করুন।

এখানে একটি ছোট উদাহরণ:

<?php
...
$userCollection = [$user1, $user2, $user3];

$data = Marshal::serializeCollectionCallable(function (User $user) {
    return [
        'username' => $user->getUsername(),
        'email'    => $user->getEmail(),
        'birthday' => $user->getBirthday()->format('Y-m-d'),
        'followers => count($user->getFollowers()),
    ];
}, $userCollection);

header('Content-Type: application/json');
echo json_encode($data);

0

আপনি যখনই API এর জন্য JSON প্রতিক্রিয়া ফিরিয়ে দেওয়ার চেষ্টা করছেন বা অন্যথায় আপনার যথাযথ শিরোনাম রয়েছে তা নিশ্চিত করে নিন এবং কোনও বৈধ JSON ডেটা ফেরত নিশ্চিত করেছেন।

এখানে নমুনা স্ক্রিপ্ট যা আপনাকে পিএইচপি অ্যারে বা জেএসএন ফাইল থেকে জেএসএন প্রতিক্রিয়া ফিরিয়ে আনতে সহায়তা করে।

পিএইচপি স্ক্রিপ্ট (কোড):

<?php

// Set required headers
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');

/**
 * Example: First
 *
 * Get JSON data from JSON file and retun as JSON response
 */

// Get JSON data from JSON file
$json = file_get_contents('response.json');

// Output, response
echo $json;

/** =. =.=. =.=. =.=. =.=. =.=. =.=. =.=. =.=. =.=. =.  */

/**
 * Example: Second
 *
 * Build JSON data from PHP array and retun as JSON response
 */

// Or build JSON data from array (PHP)
$json_var = [
  'hashtag' => 'HealthMatters',
  'id' => '072b3d65-9168-49fd-a1c1-a4700fc017e0',
  'sentiment' => [
    'negative' => 44,
    'positive' => 56,
  ],
  'total' => '3400',
  'users' => [
    [
      'profile_image_url' => 'http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg',
      'screen_name' => 'rayalrumbel',
      'text' => 'Tweet (A), #HealthMatters because life is cool :) We love this life and want to spend more.',
      'timestamp' => '{{$timestamp}}',
    ],
    [
      'profile_image_url' => 'http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg',
      'screen_name' => 'mikedingdong',
      'text' => 'Tweet (B), #HealthMatters because life is cool :) We love this life and want to spend more.',
      'timestamp' => '{{$timestamp}}',
    ],
    [
      'profile_image_url' => 'http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg',
      'screen_name' => 'ScottMili',
      'text' => 'Tweet (C), #HealthMatters because life is cool :) We love this life and want to spend more.',
      'timestamp' => '{{$timestamp}}',
    ],
    [
      'profile_image_url' => 'http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg',
      'screen_name' => 'yogibawa',
      'text' => 'Tweet (D), #HealthMatters because life is cool :) We love this life and want to spend more.',
      'timestamp' => '{{$timestamp}}',
    ],
  ],
];

// Output, response
echo json_encode($json_var);

জেএসন ফাইল (জেএসএন ডেটা):

{
    "hashtag": "HealthMatters", 
    "id": "072b3d65-9168-49fd-a1c1-a4700fc017e0", 
    "sentiment": {
        "negative": 44, 
        "positive": 56
    }, 
    "total": "3400", 
    "users": [
        {
            "profile_image_url": "http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg", 
            "screen_name": "rayalrumbel", 
            "text": "Tweet (A), #HealthMatters because life is cool :) We love this life and want to spend more.", 
            "timestamp": "{{$timestamp}}"
        }, 
        {
            "profile_image_url": "http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg", 
            "screen_name": "mikedingdong", 
            "text": "Tweet (B), #HealthMatters because life is cool :) We love this life and want to spend more.", 
            "timestamp": "{{$timestamp}}"
        }, 
        {
            "profile_image_url": "http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg", 
            "screen_name": "ScottMili", 
            "text": "Tweet (C), #HealthMatters because life is cool :) We love this life and want to spend more.", 
            "timestamp": "{{$timestamp}}"
        }, 
        {
            "profile_image_url": "http://a2.twimg.com/profile_images/1285770264/PGP_normal.jpg", 
            "screen_name": "yogibawa", 
            "text": "Tweet (D), #HealthMatters because life is cool :) We love this life and want to spend more.", 
            "timestamp": "{{$timestamp}}"
        }
    ]
}

JSON স্ক্রাইশট:

এখানে চিত্র বর্ণনা লিখুন


-1

আপনি এই ছোট পিএইচপি গ্রন্থাগারটি ব্যবহার করতে পারেন । এটি শিরোনাম প্রেরণ করে এবং সহজেই এটি ব্যবহার করার জন্য আপনাকে একটি অবজেক্ট দেয়।

এটা দেখতে অনেকটা :

<?php
// Include the json class
include('includes/json.php');

// Then create the PHP-Json Object to suits your needs

// Set a variable ; var name = {}
$Json = new json('var', 'name'); 
// Fire a callback ; callback({});
$Json = new json('callback', 'name'); 
// Just send a raw JSON ; {}
$Json = new json();

// Build data
$object = new stdClass();
$object->test = 'OK';
$arraytest = array('1','2','3');
$jsonOnly = '{"Hello" : "darling"}';

// Add some content
$Json->add('width', '565px');
$Json->add('You are logged IN');
$Json->add('An_Object', $object);
$Json->add("An_Array",$arraytest);
$Json->add("A_Json",$jsonOnly);

// Finally, send the JSON.

$Json->send();
?>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.