'set'类型的对象不是JSON可序列化的

2424
5
跳到解决方案
03-03-2021 05:42 am
AFackler_NAPSG
偶然的因素

大家好,

我试图在ArgGIS API for Python (on ArcGIS Online)中创建2个托管功能层之间的连接。我一直收到一个类型错误,我真的不知道如何处理它。

异常发生了一个一般错误:类型'set'的对象不是JSON可序列化的

下面是代码和输出:

joinData = join_features(target_layer=facilities,
join_layer =县、
output_name = " Facility_county_join ",
join_operation = " JoinOneToOne ",
spatial_relationship = " ",
attribute_relationship =[{“名称”、“设施”}),
summary_fields =[{“Current_Status”、“和”}))

TypeError回溯(最近的最后一次调用)/ opt / conda / lib / python3.6 /网站/ arcgis / gis / _impl / _con / _connection.py帖子(self, path, params, files, **kwargs)662如果isinstancevdict列表元组保龄球- > 663参数个数k]json转储v664elifisinstancevPropertyMap/ opt / conda / lib / python3.6 / json / __init__ . py转储(obj, skipkeys, ensure_ascii, check_circular, allow_nan, cls,缩进,分隔符,default, sort_keys, **kw)230default是None,不是sort_keys,也不是kw):- > 231返回_default_encoder编码obj232如果cls没有一个/ opt / conda / lib / python3.6 / json / encoder.py编码(自我,o)198#相当于“.join()”所做的PySequence_Fast。- > 199自我iterencodeo_one_shot真正的200如果isinstance列表元组/ opt / conda / lib / python3.6 / json / encoder.pyiterencode(self, 0, _one_shot)256自我。skipkeys _one_shot)- > 257返回_iterencodeo0258/ opt / conda / lib / python3.6 / json / encoder.py默认的(自我,o)179抛出TypeError("类型'%s'的对象不是JSON可序列化的" %- > 180o.__class__.__name__)181TypeError在处理上述异常期间,发生了另一个异常:异常回溯(最近的最后一次调用)< ipython-input-26-cf1ae0f3dbb2 ><模块>5spatial_relationship”“6attribute_relationship{“名称”“设施”]——> 7summary_fields =[{“Current_Status”、“和”}))/ opt / conda / lib / python3.6 /网站/ arcgis /功能/ summarize_data.pyjoin_features(target_layer, join_layer, spatial_relationship, spatial_relationship_distance, spatial_relationship_distance_units, attribute_relationship, join_operation, summary_fields, output_name, context, gis, estimate, future)640如果“summary_fields”参数个数641参数个数“summary_fields”]summary_fields- > 642返回地理信息系统_toolsfeatureanalysisjoin_features**参数个数/ opt / conda / lib / python3.6 /网站/ arcgis / _impl / tools.pyjoin_features(self, target_layer, join_layer, spatial_relationship, spatial_relationship_distance, spatial_relationship_distance_units, attribute_relationship, join_operation, summary_fields, output_name, context, estimate, records_to_match, future)2746output_nameoutput_name2747上下文上下文地理信息系统自我_gis- > 2748未来= True)2749gpjob_is_fa真正的2750如果未来<字符串>join_features(target_layer, join_layer, spatial_relationship, spatial_relationship_distance, spatial_relationship_distance_units, attribute_relationship, join_operation, summary_fields, records_to_match, output_name, context, join_type, gis, future)/ opt / conda / lib / python3.6 /网站/ arcgis /地理处理/ _support.py_execute_gp_tool(gis, task_name, params, param_db, return_values, use_async, url, webtool, add_token, return_messages, future)388job_infogptool_con帖子submit_urlgp_params389其他的- > 390job_infogptool_con帖子submit_urlgp_params391job_idjob_info“jobId”]392如果未来/ opt / conda / lib / python3.6 /网站/ arcgis / gis / _impl / _con / _connection.py帖子(self, path, params, files, **kwargs)698"必须提供URL方案:%s" % errMS)699除了异常作为e- > 700提高异常“发生一般错误:%s”e701除了702进口回溯异常发生了一个一般错误:类型'set'的对象不是JSON可序列化的

提前感谢!

标签(3)
0荣誉
1解决方案

接受的解决方案
AFackler_NAPSG
偶然的因素

好的,中间有一些帮助@DanPatterson这里有一些文档https://developers.arcgis.com/rest/services-reference/join-features.htm我设法把它修好了。我在属性关系中缺少了一些参数。最后的代码:

joinData = join_features(target_layer=facilities,
join_layer =县、
output_name = " Facility_county_join ",
join_operation = " JoinOneToOne ",
spatial_relationship = " ",
attribute_relationship=[{"targetField": "NAME", "joinField": "Facility", "operator": " equal "}],
summary_fields=[{"statisticType": "Sum", "onStatisticField": "Current_status"}])

在原帖子中查看解决方案

5回复
DanPatterson
通过 MVP尊敬贡献者
MVP尊敬贡献者

是否需要列表中的{}

目前,您已经在列表中定义了一个集合。

a = [{"NAME", "Facility"}] type(a[0]) set a0 = ["NAME", "Facility"] type(a0) list type(a0[0]) str

…有点退休了……
0荣誉
AFackler_NAPSG
偶然的因素

我不这么想。我做了一些玩弄,我认为属性关系需要{},但现在我有一个错误与摘要字段,只是说“工作失败”。

joinData = join_features(target_layer=facilities,
join_layer =县、
output_name = " Facility_county_join ",
join_operation = " JoinOneToOne ",
spatial_relationship = " ",
attribute_relationship ={“名称”、“设施”},
summary_fields =(“Current_Status”、“金额”))

adamfackler1_0 - 1614781776711. - png

0荣誉
DanPatterson
通过 MVP尊敬贡献者
MVP尊敬贡献者

两个参数都表示一个字典列表。

attribute_relationship = [{"NAME": "Facility"}]

summary_fields = [{"Current_Status": "SUM"}]

a = [{"NAME": "Facility"}] type(a) list type(a[0]) dict

当然,我无法在文档中找到任何示例语法,因此,如果它是真的,请尝试使用dict列表

冒号起了作用

type({"NAME", "Facility"}) set type({"NAME": "Facility"}) dict

齿顶高

在他们的代码中找到了一个例子

summary_fields=[{"statisticType": "Mean", "onStatisticField": "Population"}

又名。字典项的列表


…有点退休了……
AFackler_NAPSG
偶然的因素

好的,中间有一些帮助@DanPatterson这里有一些文档https://developers.arcgis.com/rest/services-reference/join-features.htm我设法把它修好了。我在属性关系中缺少了一些参数。最后的代码:

joinData = join_features(target_layer=facilities,
join_layer =县、
output_name = " Facility_county_join ",
join_operation = " JoinOneToOne ",
spatial_relationship = " ",
attribute_relationship=[{"targetField": "NAME", "joinField": "Facility", "operator": " equal "}],
summary_fields=[{"statisticType": "Sum", "onStatisticField": "Current_status"}])

通过 匿名用户
不适用

感谢张贴你的最终解决方案。

0荣誉