0

言い忘れましたが、次の CURL を使用してデータを送信しています。

curl -i -H "Content-Type: application/json" -X GET "http://appdev1.ischoolcampus.com/api/assignments" -d '{"guid":"teacherones-class","isTeacher":0}'

一部のデータとデータの形式 (JSON、XML など) を送信する Assignments.GET() メソッドがあります...

ClientRequest.Receive(data,method) フォーマットに基づいて、それを ClientRequest の別のメソッドに送信します...

JSON(data) は、iSCJSON.Decode(data)... を使用してデータをデコードします。

json.loads(data) はそれを辞書として吐き出すはずですが、代わりに次のエラーが表示されます:

AttributeError: 'NoneType' object has no attribute 'loads'

各クラスは異なるモジュールにあります:

Assignments - imports:
  ClientRequest - imports:
    iSCJSON.

Assignments から iSCJSON.Decode(json_data) を呼び出すだけでこれを試してみましたが、うまくいきました。json_data が完全にドリルダウンされたら、実際にコンテンツがあることを確認しました。

しかし、何らかの理由でまだエラーが発生します。

何か案は?

クラス:

課題

import sys
sys.path.insert(1,'/Library/Server/Web/Data/Sites/iconnect/')

import web

if 'iSCModules.mod_ClientRequest' in sys.modules:  
    del(sys.modules["iSCModules.mod_ClientRequest"])

if 'iSCModules.mod_ServerResponse' in sys.modules:  
    del(sys.modules["iSCModules.mod_ServerResponse"])

from iSCModules.mod_ClientRequest import ClientRequest
from iSCModules.mod_ServerResponse import ServerResponse
#from iSCModules.mod_iSCJSON import iSCJSON

class Assignments:
    def GET(self):
        sentData = web.data()
        #query = iSCJSON.Decode(sentData)
        print "Sent Data is: " + sentData
        query = ClientRequest.Receive(sentData, 'JSON')
        # \/ Replace With Code \/
        print "Query from Assignments is: " + query
        data = query 
        # /\ Replace with Code /\
        return ServerResponse.Send(data, 'JSON')

クライアントリクエスト

import sys
sys.path.insert(1,'/Library/Server/Web/Data/Sites/iconnect/')

import web

#if 'iSCModules.mod_iSCJSON' in sys.modules:  
#    del(sys.modules["iSCModules.mod_iSCJSON"])

from mod_iSCJSON import iSCJSON

class ClientRequest:
    @staticmethod
    def Receive(data, method):
        #sentData = web.data() #Need to figure out why this doesn't work...
        # Remove method from parameters, Set method using logic to determine format of data sent from client. 
        query = getattr(ClientRequest, method)(data)
        if (query):
            print "Query from ClientRequest is: " + query
            return query

    @staticmethod
    def JSON(data):
        decodedData = iSCJSON.Decode(data)
        if (decodedData):
            return decodedData

ISJSON

import sys
sys.path.insert(1,'/Library/Server/Web/Data/Sites/iconnect/')

import json

class iSCJSON:
    @staticmethod
    def Encode(json_string, compact=False):
        if (compact):
            result = json.dumps(json_string,separators=(',',':'))
        else:
            result = json.dumps(json_string)
        if ( result ):
            return result

    @staticmethod
    def Decode(json_data, encoding=''):
        print "JSON Data is: " + json_data
        result = json.loads(json_data)
        print "Result of iSCJSON is: " + result
        if ( result ):
            return result
4

2 に答える 2

0

エラー メッセージは、json is None. おそらくjson、同じ名前のモジュールを隠して、変数名として使用していますか?

于 2013-01-29T14:40:35.173 に答える
0

そこで、2 つのクラスを 1 つのモジュールに結合し、メソッドの数を減らすことで、これを解決する方法を考え出しました。ClientRequest と別のクラス ServerResponse を Server という 1 つのクラスに結合しました。このクラスは、Send と Receive の 2 つのメソッドだけで両方の機能を実行します。2 つのメソッドは、エンコードとデコードを行うために iSCJSON または iSCXML のどちらのクラスを呼び出すかを決定します。したがって、実際に問題を解決することなく、より少ないコードで問題を解決しました。

于 2013-01-29T23:04:17.127 に答える