PHP से जावास्क्रिप्ट पर JSON लौट रहा है?


135

मेरे पास एक PHP स्क्रिप्ट है जिसे jQuery AJAX के माध्यम से बुलाया जा रहा है। मैं चाहता हूँ कि जावास्क्रिप्ट स्क्रिप्ट JSON प्रारूप में डेटा को जावास्क्रिप्ट में वापस करे। यहाँ PHP स्क्रिप्ट में छद्म कोड है:

$json = "{";
foreach($result as $addr)
{
    foreach($addr as $line)
    {
        $json .= $line . "\n";
    }
    $json .= "\n\n";
}
$json .= "}";

असल में, मुझे $ जोंस में सम्मिलित होने के लिए दो के परिणामों की आवश्यकता है।

जवाबों:


194

Php में एक इनबिल्ट JSON Serialising फंक्शन है।

json_encode

json_encode

कृपया उपयोग करें कि यदि आप कर सकते हैं और पीड़ित नहीं है यहाँ सिंड्रोम।


2
बहुत बड़िया धन्यवाद। मैंने वास्तव में एसओ पर पोस्ट करने से पहले इसे देखा था, लेकिन मुझे नहीं लगता था कि यह मेरी होस्टिंग पर उपलब्ध होगा।
AquinasTub

यह 'उत्तर' पूर्ण नहीं है, बल्कि अन-उपयोगी है। अधिक संपूर्ण जानकारी के लिए aesede से उत्तर देखें।
फनक डॉक

@FunkDoc प्रश्न में ओपी JSON हाथ से एक साथ स्ट्रिंग कर रहा था, इस धारणा के तहत कि उनकी एकमात्र पसंद थी। यह जानते हुए भी कि उनका एकमात्र विकल्प एक उपयुक्त समाधान नहीं था। इस बात की कोई बाध्यता नहीं है कि उस JSON का अंतिम परिणाम HTTP प्रतिसाद के रूप में उत्सर्जित किया जाएगा। "हेडर जोड़ें" जानकारी, जबकि एक स्थिति के लिए उपयोगी है, आपकी मदद करने के लिए नहीं जा रहा है यदि आप उस JSON के साथ क्या कर रहे हैं तो बस इसे "वेब पृष्ठ पर शब्दशः लौटाएं" नहीं है। प्रश्न ने usecase में स्पष्टीकरण नहीं जोड़ा।
केंट फ्रेड्रिक

(इसके अतिरिक्त, हेडर सेट करना AJAX के लिए कड़ाई से आवश्यक नहीं है। माफी अगर मुझे अचानक लगती है, लेकिन उद्धरणों में "जवाब" शब्द द्वारा दिया गया शेड वास्तव में मुझे घायल कर देता है, तो यह 10 साल पहले था, इसे पहले ही मर जाने दें। मैं PHP से बहुत पहले चला गया हूं कि जिस भाषा को मैं स्थानांतरित कर रहा हूं वह अब भी दूर जा रही है।)
केंट फ्रेड्रिक

145

पिछले उत्तरों में कुछ बातें याद आ रही हैं:

  1. अपने PHP में हेडर सेट करें:

    header('Content-type: application/json');
    echo json_encode($array);
  2. json_encode()जावास्क्रिप्ट ऑब्जेक्ट के बजाय एक जावास्क्रिप्ट सरणी वापस कर सकते हैं , देखें: PHP स्क्रिप्ट से रिटर्निंग JSON यह कुछ मामलों में जानना महत्वपूर्ण हो सकता है क्योंकि सरणियाँ और ऑब्जेक्ट समान नहीं हैं।


2
यह नोट करना महत्वपूर्ण है कि डेटा रिटर्न एड के बजाय इको एड है! जब मैंने पहली बार अवधारणा सीखी थी, तो मुझे अच्छा लगा। क्योंकि सामान्य प्रोग्रामिंग में, लगभग सब कुछ आमतौर पर "मुद्रित" नहीं किया जाता है।
जूहा अनटाइनन

हे @ जूहा, ध्यान रखें कि json_encode()(सभी कार्यों की तरह) हमेशा कुछ (सहित NULL) वापस करता है; आप डेटा को प्रिंट कर सकते हैं, इसे प्रोसेस कर सकते हैं और फिर इसे प्रिंट कर सकते हैं, बाद में उपयोग करने के लिए एक वैरिएबल को दे सकते हैं, इसे किसी फाइल आदि में सेव कर सकते हैं ... आप PHP के बारे returnमें और अधिक पढ़ सकते हैं : रिटर्निंग मान । इसके अलावा, आप प्रत्येक फ़ंक्शन को जो रिटर्न नहीं जानते हैं, उसके लिए जांच (और!) करें, हमारा उदाहरण देखें json_encode () यह बताता है कि रिटर्न रिटर्न JSON सफलता पर स्ट्रिंग या विफलता पर FALSE है।
एसेडेड

फिर, मैं सोच रहा था कि return json_encode($jsonArray);काम क्यों नहीं किया (AngularJS http.get कुछ भी नहीं मिला), जब तक मैंने बाद में इस पर ध्यान नहीं दिया :)
Juha Untinen

83

PHP के प्रलेखन में एक JSON अनुभाग है। आपको PHP 5.2.0 की आवश्यकता होगी।

PHP 5.2.0 के रूप में, JSON एक्सटेंशन को बंडल किया गया है और डिफ़ॉल्ट रूप से PHP में संकलित किया गया है।

यदि आप नहीं करते हैं, तो यहां PECL लाइब्रेरी स्थापित कर सकते हैं।

<?php
    $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);

    echo json_encode($arr); // {"a":1,"b":2,"c":3,"d":4,"e":5}
?>

13

आमतौर पर आप अपने डेटा को प्राप्त करने के अंत में कुछ संरचना में रुचि रखते हैं:

json_encode($result)

यह सरणी कुंजियों को भी संरक्षित करेगा।

याद रखें कि json_encode केवल utf8 -encoded डेटा पर काम करता है।


4

आप PHP के लिए Simple JSON का उपयोग कर सकते हैं । यह हेडर को JSON फोर्ज करने में आपकी मदद करता है।

ऐसा लग रहा है :

<?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();
?>

चेतावनी: PHP के लिए सरल JSON GPLv2 लाइसेंस प्राप्त है, इसलिए इसका उपयोग करने के लिए आपका अपना कोड ओपन-सोर्स होना चाहिए।
जेमी बिर्च

1
अब एमआईटी लाइसेंस :)
एलेक्सिस पेस

1
@JamieBirch व्यवहार में मुझे लगता है कि आप गलत समझ रहे हैं कि GPL कैसे काम करता है। यदि आप एजीपीएल के बारे में बात कर रहे थे, तो आप कुछ पर होंगे। लेकिन इंटरनेट के विशाल पेंच जीपीएल सॉफ्टवेयर पर बनाए गए हैं और उनके कोड को खोलने के लिए कोई दायित्व नहीं है, क्योंकि वे उपयोगकर्ताओं को उनके नियंत्रण में कोई निष्पादन योग्य नहीं दे रहे हैं, केवल इसे एक इंटरफ़ेस प्रदान कर रहे हैं। उनका एकमात्र दायित्व यह है कि वे जो भी परियोजना की डिजिटल प्रतियां देते हैं, उन्हें भी स्रोत दिया जाना चाहिए।
केंट फ्रेड्रिक

1

$ संदेश = "आप गलत उपयोगकर्ता नाम या पासवर्ड दर्ज करें"; $ Responso = json_encode ($ msg);

echo "{\"status\" : \"400\", \"responce\" : \"603\", \"message\" : \"You Enter Wrong Username OR Password\", \"feed\":".str_replace("<p>","",$responso). "}";
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.