jQuery . getjson和转义字符

jQuery .getJSON and escape character

本文关键字:转义字符 getjson jQuery      更新时间:2023-09-26

我调用。getjson,响应是一个JSON字符串,有很多'"字符。在chrome上启动页面时,回调不会触发。我读到它不会触发,因为JSON字符串不是JSON验证。(尽管它通过了JSONLint测试)。

在eclipse的内置web浏览器中启动页面时,回调会触发,因此我可以向您展示响应:

{"merchants": ["{'"loyaltyLevel'": 3, '"distance'": 100.5, '"imageUrl'": '"http://1.bp.blogspot.com/-hY-Kri63wzs/TeHzpxJ2BJI/AAAAAAAAA4Q/pmq2Yvki8WY/s1600/funny-dog-picture-ass.jpg'", '"name'": '"Papa Kapa'", '"credit'": 25000}", "{'"loyaltyLevel'": 3, '"distance'": 100.5, '"imageUrl'": '"http://1.bp.blogspot.com/-hY-Kri63wzs/TeHzpxJ2BJI/AAAAAAAAA4Q/pmq2Yvki8WY/s1600/funny-dog-picture-ass.jpg'", '"name'": '"Papa Kapa'", '"credit'": 25000}", "{'"loyaltyLevel'": 3, '"distance'": 100.5, '"imageUrl'": '"http://1.bp.blogspot.com/-hY-Kri63wzs/TeHzpxJ2BJI/AAAAAAAAA4Q/pmq2Yvki8WY/s1600/funny-dog-picture-ass.jpg'", '"name'": '"Papa Kapa'", '"credit'": 25000}", "{'"loyaltyLevel'": 3, '"distance'": 100.5, '"imageUrl'": '"http://1.bp.blogspot.com/-hY-Kri63wzs/TeHzpxJ2BJI/AAAAAAAAA4Q/pmq2Yvki8WY/s1600/funny-dog-picture-ass.jpg'", '"name'": '"Papa Kapa'", '"credit'": 25000}", "{'"loyaltyLevel'": 3, '"distance'": 100.5, '"imageUrl'": '"http://1.bp.blogspot.com/-hY-Kri63wzs/TeHzpxJ2BJI/AAAAAAAAA4Q/pmq2Yvki8WY/s1600/funny-dog-picture-ass.jpg'", '"name'": '"Papa Kapa'", '"credit'": 25000}"]}

我做了一些调试,确实Javascript不会jsonParse这个

任何想法?

下面是我的代码:
    <!DOCTYPE html>
<html>
<head>
  <style>img{ height: 100px; float: left; }</style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
  <div id="images">
</div>
<script>
$.getJSON("some_url",
  function(data) 
  {
    alert("success");
  });
</script>
</body>
</html>

服务器端代码:

import logging
log = logging.getLogger(__name__)
import appcardrestapi.Errors
import sys
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPUnauthorized, HTTPBadRequest
from appcardrestapi.BL.usermanagement import UserObj
class merchant():
    def __init__(self,name,imageUrl,loyaltyLevel,distance,credit):
        self.name = name
        self.imageUrl = imageUrl
        self.loyaltyLevel = loyaltyLevel
        self.distance = distance
        self.credit = credit
    def getJson(self):
        import json
        return json.dumps({'name':self.name, 'imageUrl':self.imageUrl,'loyaltyLevel':self.loyaltyLevel,'distance':self.distance,'credit':self.credit})

@view_config(route_name='GetMyMerchantsList', renderer='json')
def GetMyMerchantsList(request):
    rc = True
    #
    # Make sure got here with proprt JSON body, if not log and go home
    #
    try:
        log.debug('+ %s()', sys._getframe().f_code.co_name)
        #jsonBody = json.loads(request.GET)
        # Check authentication token
        authenticationToken = request.GET.getone('authenticationToken')
        token = authenticationToken.encode('ascii', 'ignore')
        user = UserObj.User(authenticationToken=token)
        rc, errorMsg = user.ValidateTokenAndLoadUser(request)
        import json

        if True == rc:
            location = request.GET.getone('location').encode('ascii', 'ignore')
            i = 0
            merchants = []
            while i < 5 :
                m = merchant('Papa Kapa','http://1.bp.blogspot.com/-hY-Kri63wzs/TeHzpxJ2BJI/AAAAAAAAA4Q/pmq2Yvki8WY/s1600/funny-dog-picture-ass.jpg',3,100.5,25000)
                print m.getJson()
                merchants.append(m.getJson())
                i = i + 1

            response = json.dumps({'merchants':merchants})
            return response
    except Exception as e:
        print e
        errorMsg = appcardrestapi.Errors.InvalideJsonPassed
        log.error('  %s(%s)' % (sys._getframe().f_code.co_name, errorMsg))
        rc = False
        import json
        response = json.dumps({'Error':errorMsg})
        return response

我看到你json lint响应

"{'"loyalty

为什么你有第一个" ?

按照

"{'"loyaltyLevel'": 3, '"distance'": 100.5

你会发出->

"{"loyaltyLevel": 3, "distance": 100.5

所以我问为什么第一个是" ?

编辑:

我明白你为什么把"放在开头

将其视为字符串....

类似这样:

 "{"loyaltyLevel": 3,....}",

你应该去掉周围的"

,把它当作一个对象。

这是下面给出的实际JSON。它正在被正确解析,所有变量也都可以访问。

{
    "merchants": [
        {
            "loyaltyLevel": 3,
            "distance": 100.5,
            "imageUrl": "http://1.bp.blogspot.com/-hY-Kri63wzs/TeHzpxJ2BJI/AAAAAAAAA4Q/pmq2Yvki8WY/s1600/funny-dog-picture-ass.jpg",
            "name": "Papa Kapa",
            "credit": 25000
        },
        {
            "loyaltyLevel": 3,
            "distance": 100.5,
            "imageUrl": "http://1.bp.blogspot.com/-hY-Kri63wzs/TeHzpxJ2BJI/AAAAAAAAA4Q/pmq2Yvki8WY/s1600/funny-dog-picture-ass.jpg",
            "name": "Papa Kapa",
            "credit": 25000
        },
        {
            "loyaltyLevel": 3,
            "distance": 100.5,
            "imageUrl": "http://1.bp.blogspot.com/-hY-Kri63wzs/TeHzpxJ2BJI/AAAAAAAAA4Q/pmq2Yvki8WY/s1600/funny-dog-picture-ass.jpg",
            "name": "Papa Kapa",
            "credit": 25000
        },
        {
            "loyaltyLevel": 3,
            "distance": 100.5,
            "imageUrl": "http://1.bp.blogspot.com/-hY-Kri63wzs/TeHzpxJ2BJI/AAAAAAAAA4Q/pmq2Yvki8WY/s1600/funny-dog-picture-ass.jpg",
            "name": "Papa Kapa",
            "credit": 25000
        },
        {
            "loyaltyLevel": 3,
            "distance": 100.5,
            "imageUrl": "http://1.bp.blogspot.com/-hY-Kri63wzs/TeHzpxJ2BJI/AAAAAAAAA4Q/pmq2Yvki8WY/s1600/funny-dog-picture-ass.jpg",
            "name": "Papa Kapa",
            "credit": 25000
        }
    ]
}

使用jsonlinto验证它。如果它是从url返回的,它应该是可见的。