Geçersiz PHP JSON kodlaması

4 Cevap php

(Ben JSLint kullanıyorum ben (Python) bir webcoder bir json dize göndermek gerekiyor, ama ben json_encode aldığım sonuç geçerli bir JSON olarak geçmez PHP bir proje (5.3.1) üzerinde çalışıyorum geçerliliğini) kontrol etmek.

Ben kodlamak çalışıyorum yapısı (13K kodlanmış) oldukça büyük ve UTF8 veri kısmen ibaret olduğunu eklemek gerekir, ve json_encode ele yapar iken, i sonucu garip yerlerde boşluk olsun. Örneğin, {"merhaba": tru E} alabilir veya {"cehennem o": true} JSON (ikinci örnekteki gibi, veya veri) geçersiz olduğu webservice bir hatayla sonuçlanır.

Ben de JSON kodlaması için Zend framework kullanmak denedim, ama o kadar farklı yapmak değildi.

PHP ile JSON bilinen bir sorun var mı? Herkes bu davranışı karşılaşma ve bir çözüm bulundu mi?

4 Cevap

Ben diğer gün bazı otomatik olarak oluşturulan e-postalar işleme ve aynı garip davranışı (boşluk e-posta vücuda yerleştirildi) fark, bu yüzden e-posta mesajı teslim etmeye başlamış ve suçlu bulundu:

SMTP RFC2821 Gönderen:

The maximum total length of a text line including the is 1000 characters (not counting the leading dot duplicated for transparency).

Benim e-posta gövdesi böylece \ n en alanlarda sorunu sabit onu kırma, tek satırda gerçekten oldu.

Emin nesne tuşları boşluk veya olmayan herhangi bir unicode karakterleri içeremez için, tırnaksız değişkenler sadece boolean, integer, float, nesne ve dizi değeri olabilir, dizeleri her zaman tırnak içine alınmalıdır.

Ayrıca, ben senin json çıktı önce doğru başlık eklemek için tavsiye ederim.

if(!headers_sent())
   header('Content-Type: application/json; charset=utf-8', true,200);

Ayrıca size geçen diziyi veya nesneyi gönderebilir miyim json_encode?

Yaklaşık bir gün boyunca kafamı çizilmemesi sonra, ben sorun json_encode işlevinde değildi sonuca geldik. Bu benim sonrası fonksiyonu ile oldu.

Temelde, json_encode başka bir servise gönderilecek verilerin hazırlanıyordu. Bugünden önce, ben stream_context_create kullanılan ve dış hizmetine veri göndermek için fopen, ama şimdi ben fsockopen kullanımı ve fputs ve çalışıyor gibi görünüyor ettik.

Ben sorunun doğası olarak emin değilim, ancak ben şimdi çalışıyor mutluyum :)

BTW: Bu işlemden sonra, kendimi giriş ve çıkış (her ikisi de JSON) mail ve bu ilk etapta bir sorun vardı ne gördüm olduğunu. Bu sorun hala devam ama o tür posta veya bir şey kodlama ile ilgili sanırım.