如何从Amazon Python Lambda返回json,可以通过Android GSON api处理

2024-09-30 20:19:06 发布

您现在位置:Python中文网/ 问答频道 /正文

问题:

lambda函数返回字符串,我无法在lambda函数中编写正确的语法来将其转换为json以使用GSON进行解析。在

Android学习日志:

FATAL EXCEPTION: AsyncTask #1
 Process: com.innovdroid.awslambdatest, PID: 6252
    java.lang.RuntimeException: An error occurred while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:309)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
    atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:111)
    atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:58)at java.lang.Thread.run(Thread.java:818)Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176)at com.google.gson.Gson.fromJson(Gson.java:803)at com.google.gson.Gson.fromJson(Gson.java:741)at com.amazonaws.mobileconnectors.lambdainvoker.LambdaJsonBinder.deserialize(LambdaJsonBinder.java:47)at com.amazonaws.mobileconnectors.lambdainvoker.LambdaInvocationHandler.processInvokeResult(LambdaInvocationHandler.java:134)at com.amazonaws.mobileconnectors.lambdainvoker.LambdaInvocationHandler.invoke(LambdaInvocationHandler.java:64)at java.lang.reflect.Proxy.invoke(Proxy.java:393)
    at $Proxy0.GetAllSchoolsNames(Unknown Source)at com.innovdroid.awslambdatest.MainActivity$1.doInBackground(MainActivity.java:47)at com.innovdroid.awslambdatest.MainActivity$1.doInBackground(MainActivity.java:41)
    at android.os.AsyncTask$2.call(AsyncTask.java:295) at java.util.concurrent.FutureTask.run(FutureTask.java:237)at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
at java.lang.Thread.run(Thread.java:818) Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 2at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:374)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:165)at com.google.gson.Gson.fromJson(Gson.java:803) at com.google.gson.Gson.fromJson(Gson.java:741)  at com.amazonaws.mobileconnectors.lambdainvoker.Lamb at com.amazonaws.mobileconnectors.lambdainvoker.LambdaInvocationHandler.processInvokeResult(LambdaInvocationHandler.java:134) at com.amazonaws.mobileconnectors.lambdainvoker.LambdaInvocationHandler.invoke(LambdaInvocationHandler.java:64) at java.lang.reflect.Proxy.invoke(Proxy.java:393)  at $Proxy0.GetAllSchoolsNames(Unknown Source)  at com.innovdroid.awslambdatest.MainActivity$1.doInBackground(MainActivity.java:47) at com.innovdroid.awslambdatest.MainActivity$1.doInBackground(MainActivity.java:41)at android.os.AsyncTask$2.call(AsyncTask.java:295)at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
 at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
    at java.lang.Thread.run(Thread.java:818) 

Tags: runcomlangutilgooglejavaconcurrentat
1条回答
网友
1楼 · 发布于 2024-09-30 20:19:06

问题是aws lambda返回:{“/contrecords/”:“6”},如果您有一个json并再次将其转换为json,就会出现这种情况:

在python中,如果您有: not_encoded={“contrecords”:str(item_count)}//这已经是json了 没必要usejson.dumps(not_encoded)//这将导致Android GSON在解析时出错。在

移动设备可以调用lambda函数(发送请求和获取响应)。但android设备连接到amazon lambda函数时仍然存在响应超时的问题。如果你的amazon lambda在vpc中,你必须有一个Internet网关和Nat网关。当发生超时时,Nat网关会重新打开与amazon资源的连接。在

参见: 创建Python Lambda以访问amazon RDS:https://docs.aws.amazon.com/lambda/latest/dg/vpc-rds.html 为amazon lambda配置Nat网关: https://blog.rackspace.com/aws-201-understanding-the-default-virtual-private-cloud

相关问题 更多 >